第8章 SQLのストリーミング ストリーミングSQL
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
SQLについて話そう。この章では、 、中盤のオチから始め、少し時間をさかのぼって背景を説明し、最後に未来にさかのぼってすべてをきれいにまとめる。クエンティン・タランティーノがコンピューター・サイエンスの学位を持ち、ストリーミングSQLの細かい点について世界に伝えることにとても乗り気で、私と一緒にこの章をゴーストライターすることを申し出たと想像してほしい。そんな感じだ。
ストリーミングSQLとは何か?
私は、この疑問に対する答えは何十年もの間、我々の業界にはなかったと主張したい。公平を期すため、データベース・コミュニティは、かなり以前から答えの99%を理解していたかもしれない。しかし、堅牢なストリーミング・セマンティクスの全容を包含する、真に説得力のある包括的なストリーミングSQLの定義を、私はまだ見たことがない。私たちが今100%の答えを出せていると仮定するのは思い上がりだろうが、私たちはここでそれを見つけ出そうとしている。99.1%だろうか?ベイビーステップだ。
いずれにせよ、この章で説明することのほとんどは、執筆時点ではまだ純粋に仮説に過ぎないことを前もって指摘しておきたい。この章とその後に続く章(ストリーミングジョインについて)は、ストリーミングSQLの理想的な構想を述べている。いくつかの部分は、Apache Calcite、Apache Flink、Apache Beamのようなシステムで既に実装されている。 他の多くはどこにも実装されていない。途中、具体的な形で存在するものをいくつか呼び出してみようと思うが、それが動く目標であることを考えると、最善の策は、単に興味のある特定のシステムのドキュメントを参照することである。
その上で、ここで紹介するストリーミングSQLの構想は、Calcite、Flink、Beamの各コミュニティが共同で議論した結果であることも強調しておきたい。Calciteのリード開発者であるJulian Hydeは、ストリーミングSQLがどのようなものになるかについて、長い間構想を練ってきた。2016年、Flinkコミュニティのメンバーは、Flink自体にCalcite SQLサポートを統合し、Calcite SQL方言にウィンドウ構造などのストリーミングに特化した機能を追加し始めた。そして2017年、3つのコミュニティは、Calcite SQLにおける堅牢なストリーム処理のための言語拡張とセマンティクスがどのようなものであるべきかについて、合意を得るための議論を開始した。この章では、Calciteであろうと他の方言であろうと、SQLにストリーミングの概念を統合することについて、その議論から得られたアイデアを明確でまとまりのある物語に落とし込もうと試みている。
関係代数
ストリーミングがSQLにとってどのような意味を持つかを語るとき、SQLの理論的基礎である関係代数を念頭に置くことが重要だ。関係代数とは、単に名前付き、型付けされたタプルからなるデータ間の関係を記述する数学的な方法である。関係代数の中心にあるのは、タプルのセットである関係そのものである。 古典的なデータベース用語では、リレーショナルはテーブルのようなもので、物理的なデータベーステーブル、SQLクエリの結果、ビュー(マテリアライズド、その他)などである。
関係代数のより重要な ...