AmazonがSQL++となる新しいクエリ言語、PartiQLをオープンソースで発表


先日、AWSが、PartiQLという、新しいクエリ言語を発表しました。

忙しい人向けにAWS Open Source Blogから雑に要約しますので、詳しくは原文をどうぞ。

背景・概要

今日、我々が扱うデータは非常に巨大になっており、それらはRDBやNoSQL DB、データレイクと、ユースケースによって様々な方法で保管されます。
例えば、時にはスキーマレスな、ドキュメント指向データベースが非常に便利です。
同時にそういった場面でもSQLやSQL関連のツールを使いたくなることもあります。
ただし今までは、RDBを使うかNoSQL DBを使うかなどで通信方法やフォーマットが異なっていました。
この問題に対して今回AWSが発表したソリューションが、PartiQLです。

PartiQLは、SQL互換性のあるクエリ言語であり、簡単で一貫性のある方法によって異なるフォーマットやサービスとデータのやり取りを行うことを可能にします。
クエリエンジンがPartiQLをサポートする限り、データがどこに、どんなフォーマットで保存されているかに関わらず、効率的なデータとのやり取りを実現します。

これによって、アプリケーションコード(クエリ)を変えることなく、異なるデータソースへとデータを移行させることができます。SQLとの後方互換性があり、さらに多値、ネスト、スキーマレスのデータの拡張機能があり、標準SQLにおけるJOINやフィルター、集計機能とシームレスに融合します。

PartiQLのデザイン原則

  • SQL compatibility(SQLと互換性があること):
    • これまでのSQLは、これまで通り動きます
  • First-class nested data(第一級のネスティング):
    • SQLの標準機能と同じように、ネストされたデータに対して包括的かつ正確にクエリを実行できます。
  • Optional schema and query stability(スキーマレスと、クエリ安定性):
    • 事前に定義されたスキーマを必要としません。スキーマの存在を前提とするデータベースエンジンでも、スキーマレスエンジンでも、それぞれで使用できます。技術的には、データ自体が同じである限りクエリの結果は変わりません。
  • Minimal extensions(最小の拡張機能):
    • SQLに対する拡張機能は理解しやすく、効率的な実装です。これにより、様々なデータセットの組み合わせに対して直感的にフィルタ処理、結合、集計、およびウィンドウ処理が可能です。
  • Format independence(フォーマットの独立性):
    • クエリはデータフォーマットによらず、例えばJSONやCSVでも、同じように書き込まれます。
  • Data store independence(データストアの独立性):
    • 特定のデータストアによらず、多様なデータストアに適用可能です。

これまでもこの原則のうちいくつかを実装した言語はありましたが、これら全てを原則としている言語はPartiQLが初めてです。

オープンソースであること

PartiQLはチュートリアルから仕様、実際に動作する参考実装までApache2.0のライセンスでオープンソースとして公開されます。誰でもこの、クエリランゲージの統一に参加することができます。

PartiQLは既にAmazon S3 SelectやAmazon Glacier Select、Amazon Redshift Spectrum、Amazon QLDB、そしてAmazonの内部システムで使われ、様々な課題を解決しました。近く、より多くのAWSのサービスでサポートされる予定です。Amazonの外部でも、Couchbase Serverがサポートする予定です。

データに関わる全てのユーザーと、全ての産業がこの動きに加わることを期待しています。

はじめかた

PartiQLを試してみるには、まず最新版のJVMが必要です。
PartiQL REPLはこちらからzipファイルでダウンロードして、 bin ディレクトリにある partiql (Windowsの場合は partiql.bat )を実行すると、ターミナルが開いてREPLが実行されます。

例えば、以下のようなクエリを実行できます。

$ SELECT * FROM [1,2,3]
   | 
===' 
<<
  {
    '_1': 1
  },
  {
    '_1': 2
  },
  {
    '_1': 3
  }
>>
--- 
OK! (187 ms)

PartiQLに参加する方法

PartiQLは上述のようにオープンソースであり、さらに仕様を拡張させ、コミュニティに浸透させていくためにissueや、プルリクエストを歓迎しています。

  • PartiQLに関して、より詳しくはこちら
  • さらに詳しい仕様は、こちら

実際にはまだまだこれからという感じですが、PartiQLのようなSQL++を実装するクエリ言語が広まり各クエリエンジンに搭載されることで、僕らの技術選択の幅がこれまで以上に広げやすくなると良いですね。