[レポート]OPN207 – PartiQL: 全てのデータのためのクエリ言語 #reinvent

AWS re:Invent 2019のセッション「OPN207 - PartiQL: One query language for all of your data」のレポートです。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも、DA事業本部の大澤です。

本エントリはAWS re:Invent 2019のセッション「OPN207 - PartiQL: One query language for all of your data」のレポートです。

セッション概要

PartiQL is a SQL-compatible query language that makes it easy and efficient to process both structured (relational) data, as well as semi-structured, schemaless, and nested data, as typically found in open data formats in the Amazon S3 data lake and document-oriented databases. PartiQL is a unifying query language, enabling single-query-language access to multiple AWS services. We discuss its core tenets and how they served AWS services and Amazon projects. Then we discuss how PartiQL can benefit your applications and tools in need of unifying query access to the data lake.

意訳

PartiQLはSQL互換のクエリ言語です。構造化されたデータや準構造化データ、スキーマレス、ネストしたデータといったS3上のデータレイクやドキュメント指向のDBでみられるデータを簡単かつ効率的に扱うことができます。PartiQLは統合クエリ言語で、一つのクエリ言語で複数のAWSサービスにアクセスできます。PartiQLのコアとなる考え方とどのようにしてAWSサービスやAmazonのプロジェクトで使われているかについて話します。またデータレイクに対して統合されたクエリが必要となるアプリケーションやツールに、PartiQLがどのようなメリットがあるかについてもお話しします。

スピーカー

  • Almann Goo - Principal Engineer, Amazon Web Services
  • Yannis Papakonstantinou - Senior Principal Scientist, Amazon Web Services

レポート

What is PartiQL

  • データソースは色々ある
    • データレイク
    • RDB
    • ドキュメントDB
    • ファイル on ファイルシステム
  • データソースと同様にクエリ言語も様々
    • SQL
    • Amazon Document DB
    • JSL(JSON)
  • クエリ言語とモデルを統合する
    • フォーマットの独立性
    • ストレージの独立性
  • 同じクエリが異なるデータソースに対して同様に機能する必要がある
  • SQLの互換性
  • ネストしてたり、準構造化データも一般化して扱う
    • ネストデータ
    • オプショナルスキーマとクエリスタビリティ
  • Powerful and complete
    • 最小の互換性を持っている
  • どこで使われているのか

A walkthrough of PartiQL

  • PartiQLのデータモデル
    • Ion + SQL bags = JSON + 強い型 + bags(unordered コレクション)
    • SQL データタイプ + ネスト + 異質性 + スパースネス + Dynamically typed
  • Flattening nested data
    • CROSS JOINを使う
  • Outer flattening nested data
    • 特定の要素にしか含まれていないキーを参照し、該当キーが含まれていない要素ではnullとする
    • LEFT CROSS JOINを使う
  • Tuples in tuples
    • .を組みあわせて参照する
      • a.child.grandchild
  • Composing with SQL features
    • 例えばサブクエリといったSQLの機能とも組み合わせられる
  • Ranging over anything
  • Projecting non-tuples
    • カラムのレコードにではなく、コレクションの1要素として
    • SELECT VALUE r AS co FROM readings AS r WHERE r < 1.0 ORDER BY r DESC LIMIT 2
    • [1.3, 0.7, 0.3, 0.8] -> [0.8, 0.7]
  • エラーケースでの柔軟性
    • 動的型付けはランタイム時に間違えやすい
      • array と bags
      • strictとpermissiveの2つのモードをサポート
  • 他の機能
    • ピボットとアンピボット
      • attribute/value paris of tuples
      • key/value pairs of maps
    • constructing new nested PartiQL sturecutures
      • SELECT VALUE サブクエリ
      • 集計(aggregating)
  • PartiQL as a unifying query language
    • リレーションテーブルとJSONなどと組み合わせる

Open Source PartiQL

さいごに

様々なデータソースを統合してSQLクエリを実行できるPartiQLを紹介したセッションでした。オープンソースなので、AWSのサービスで使われているだけでなく、自前のシステムでも使用することができます。チュートリアルも公開されているので、興味のある方は触ってみてはいかがでしょうか。

参考