ミューズ投稿: 2023-01-30. このページの調査ソースコード ここ.
まとめ
SQLすべき新しいデータ エンジニアリング作業の主な選択肢と見なされます。 堅牢で、即時性があり、将来性があり、テスト可能です。 少し注意すれば、明確で読みやすいものになります。 新しい SQL エンジン – DuckDB – は、SQL を他の非常に効率的なデータフレーム ライブラリに対して攻撃的にし、SQL をあらゆるサイズのデータの正しい候補にします。
はじめに
私が最初に分析プログラミングを宣伝したのは、2000 年代初頭に Microsoft Entry で SQL が使用されたときでした。 その後、私はデータサイエンティストになり、パンダと dplyr の表現力と活力を大切にしました。 データ エンジニアとして、私は PySpark に手を出しました。 正直なところ、データ操作のために SQL に戻ってきました.
これらの代替ツールは、SQL の欠陥を処理するために開発されました。 しかし、全体として、SQL はほとんどの状況でより健全であることを嬉しく思います。特に、大量の作業や長期間のタスクで作業している場合はそうです
この説明は、SQL のケースを作成します。 次に、他のツールが非常に適している場合を指摘します。 取り敢えず、今後の説明と、神話を理解するのに役立つ新しいライブラリを指摘することで、問題を解決します。
SQL の利点
より多くの人々があなたのコードに夢中になるでしょう
コードは、書かれているよりも一般的に教えられるべきです。 SQL を使用することで、BI ビルダー、業界アナリスト、データ エンジニア、データ サイエンティストと並んで、必要不可欠な幅広い年齢層にコードを教えることができます
データ エンジニアリング パイプラインは、何年にもわたって使い続けられ、SQL は時の試練に耐えてきました。 10年後、20年後も静かに理解されていると思われる言語です
SQLは宣言型 ) – そのアプローチ作成者は、どのようにそれらを計算するよりも合理的に、彼らが望む結果を説明します。間違いなく、他の重要なデータ処理言語よりも自己文書化に近いです.
自動化されたバッスルの改善と「自動スケーリング」 により、将来も保証されます。
1970 年代から存在していたにもかかわらず、本質的に SQL に基づいた完全なツールは、過去 10 年間のデータ ツールの革新の生活分野で最も詰め込まれたものの 1 つと見なされていました。 SQL で記述されたデータ パイプラインは、基礎となる SQL コードをほとんど、またはまったく調整することなく、10 年前と思われるよりも早く、昇格されたデータで不可欠なものを実行できます。
起動するには追加の頻繁な SQL エンジンの正確な改善により、Spark および Presto これにより、SQL が巨大なデータセットを処理できるようになりました。 もっと正直なところ、DuckDB は、1 台のマシンで非常に瞬時に並列化された分析クエリを実行できます。 data.desk および に対応する最も速い選択肢polars、およびキープ 内で、csv で延長 せずに動作し、 寄せ木細工のファイル。 SQL の特定のフレーバーの慣習的でない機能を使用する場合はいつでも、SQLGlot
合計すると、SQL はデータ パイプラインを作成するための最も将来性のあるツールです。 多くの反対者がいますが、SQL はおそらく 20 年後には静かになるでしょう。
経験豊富なデータ エンジニアは、通常、データ形式 (日時、文字列など) が時間の浪費になることを知っています。 マップ バックの原則は、異なるプログラミング言語と SQL エンジンのデータ フォーム間の 1 対 1 のマッピングが不足していることです。 2 番目のマップ バックは、pandas および sqlite に対応する一部のツールがデータ フォームの制約を実装しなくなったことです。このアプローチでは、列がデータ フォームの混合物をぶら下げる可能性があります。
SQL を使用すると、これらの複雑さが緩和されます。 SQL エンジンは一般に強く型付けされているためです。 エコシステムは、追加のツールを提示します: Apache Arrow
- は、堅牢なさまざまなツール (R、Python、およびさまざまなデータベースに対応) 全体でのデータ フォームの一貫した処理。 Arrow で受け入れられる SQL エンジンを選択することで、ツール間のデータ型の互換性に関するこれらの複雑な問題の負荷が解消されます。
依存関係の管理が少なく、メンテナンスがより簡単になります
- 依存関係管理は、主要なメンテナンスを提供しますデータ パイプラインへの負担とアプローチ メンテナーは追加のスキルを必要とします。 SQL の消費はマップを元に戻すことはありませんが、SQL 構文の調整がそれほど頻繁に不可欠ではないため、大幅に簡素化されます。
インスタンスとして、パイプライン5 年前に R や Python で書かれたものも、このレベルの成果を上げるには数日から数週間の労力を必要とすることもあります。 コードを賑やかにする雰囲気を盛り上げるために貴重な努力を払うことは間違いありません。 SQL で記述された同様のパイプラインは、このレベルと同じくらい多くの調整を行う方法を必要とし、単にコードを認識しようとしている読者は、新しいパターンの雰囲気を確立することなく、マップ バック プロットを使用せずに SQL をプロットすることもできます。
さらに、SQL はほぼすべてのプログラミング言語から実行できるため、パイプラインを別のツールに移行したり、他のアプリケーションに適切な判断を組み込んだりすることが簡単になります。
正しい適用機械工学との互換性
多くのデータ エンジニアは、理解できない数千行の SQL スクリプトが判明する可能性を認識しています。しかし、これは組織のデータ パイプラインの深刻な半分です。 または、膨大な量のデータを処理する Spark SQL パイプラインを微調整するという課題もあります。 合計すると、伝統的に、適切なエンジニアリング適用に合わせて SQL を記述することは堅牢でした。これは、明確で簡潔で、検討されたコードに対応しており、分解可能なコンポーネントを元に戻すことはできません。
A当分の間、これらの課題の大部分は不可欠であり、3 つのコンポーネントを消費することで克服するのはそれほど複雑ではありません:
DuckDB、分析クエリ用に最適化された依存関係のない SQL エンジンであり、ユニットの評価を賑やかにするためにエージングすることもできます。通常は、より人間工学的にマッピングして、SQL コードを迅速に反復します。
- SQLGlot
に対応したツールまでありますdbt 同一のヒントを取得し、それらをフレームワークに形成します.
SQL は昔に比べて表現力と汎用性が増しています
有名な SQL エンジンは、さまざまな理由で強化されています。複雑な操作を作成する機能のマップは、以前の欠点に対処して、古くなったよりも輝いています:
ウィンドウ機能
かなり前からありましたが、異常に高性能ですより狭いアプリケーションを備えたさまざまな機能は、強力なテキスト完全素材検索、地理空間機能、PIVOT 操作、および定義された特定の人物で構成されますただし、強化が制限されているため、これらは慎重にエージングする必要があります。
また、他のツールの使用について確固たる議論ができるのはいつですか? この投稿で、SQL は一般的にパイプラインを作成するのに役立つと主張しましたが、これは簡単で、読みやすく、簡単にテストできます。 そして、コードとインフラストラクチャの全体が比較的簡単で、長引く喧騒の中で保守しやすい場所.
しかし、代替が正しいいくつかの条件があります. 例として、パンダで時系列を補間するには、 を使用できます。 resample
アプローチ – 計画が明確な 1 行のコード。 多くの SQL エンジンでは、同一の SQL を教えるのがより複雑で複雑です。 同様に、SQL はおそらく、グラフを評価するデータ構築を操作するための最終的な手段ではないかもしれません.考慮に入れます – ただし、確固たる正当化なしに、他のツールに反対する推定を指摘します.
すべてをまとめる: SQL の消費を Splink と書いた理由
この投稿を書くためのインセンティブの割り当ては、活力への SQL の消費で私が持っていた成功です Splink、大規模な確率論的ドキュメント リンクのライブラリ。 コアとなる計算全体は SQL で記述されています。
これには次の利点があります:
- モデルがトレーニングされると、Splink はモデルを表現する SQL コードを喜んで出力し、Splink を介さずに適切な判断を他のアプリケーションに埋め込むことができます。依存関係。 このマップでは、Splink モデルが dbt などで生成されます!
- Splink は、複数の実行バックエンドを強化する用意があります。おそらく、DuckDB、SQLite、Spark、または AWS Athena (Presto) を使用して実行されることさえあります。 DuckDB は、小規模から中規模の測定データの場合、ある意味で最も迅速な選択ですが、Spark と Athena は、支払いバックエンドが必要な非常にダッパーなジョブに適しています。 Splink が広範な一連のシナリオに最適化されているこのアプローチでは、グループがその実行の適切な判断を明らかにする必要はありません
Splink は将来も保証されています。 新しい SQL エンジンがすぐに登場した場合、小さなアダプターを作成することでそれを強化することができます。 実を言うと、まさにDuckDBで起きたことです
これは、特に取り上げたいトピックではないように見えます。少し複雑な反復アルゴリズム (Expectation Maximization アルゴリズムなど) は SQL を消費します。
将来の傾向
から削除されました。
魅力的なパターンの 1 つは、実行のために SQL に「まとめる」代用 API のアプローチです。 ここでの前提は、SQL エンジンが非常によく最適化されているため、ライブラリの作成者は、適切な判断を維持するために書くよりも、この作業を再利用したほうがよいということです。の上:
Malloy は、SQL にコンパイルされる、より明確で簡潔な SQL の宣言的代替を提供することを約束します。
.
CTE は、一般的に効率に適さない可能性があります).
- dbt は、現在データ エンジニアリングに採用されています。 私は特に、系統に関するより多くの事実を提示できる機能、または SQL を内省して実行効率を強化する機能に対応する将来の命令に惹かれます