目次
I.はじめに
SQL 言語では、ETL (抽出、変換、ロード) は、ソース システムからターゲット システムにデータを抽出するために使用されるプロセスです。ETL プロセスには通常、抽出、変換、ロードの 3 つの段階が含まれます。このセクションでは、GaussDB データベースのエコロジーから始まり、SQL と ETL のプロセスと関係について簡単に説明します。
2. SQL と ETL の概要
SQL (構造化クエリ言語)
SQL は、リレーショナル データベース システム (MySql、GaussDB など) を管理するための標準プログラミング言語です。データベース内のデータのクエリ、挿入、更新、削除に使用されます。SQL 言語は主にデータベース管理システムとの対話に使用され、一般的なプログラミング言語ではなく、リレーショナル データベースを操作するために特別に設計されています。
ETL (抽出・変換・ロード)
ETL は、ソース システムからデータを抽出し、ターゲット システムが必要とする形式に変換して、ターゲット システムのライブラリにロードするために使用されるプロセスです。ETL はデータ統合の一部であり、分散した一貫性のないデータを統合し、分析とアプリケーションのための統一インターフェイスを通じてターゲット システム ライブラリにデータを送信するために使用されます。
ETL はデータベースのデータ処理の重要な部分であり、ETL プロセスで SQL を使用する場合、通常は次の操作が含まれます。
3. ETLプロセスにおけるSQL例(GaussDB)
この章で説明する SQL は、GaussDB などのデータベースに適用できます。
1.抽出
ETL プロセスでは、抽出は、データを取得してソース システムからターゲット システムに転送する最初のステップです。これには、データベースへの接続、ファイルの読み取り、API の呼び出しなどの操作が含まれる場合があります。データを抽出するときは、次の点を考慮する必要があります。
- データ ソースの選択: 特定のビジネス ニーズに従ってデータ ソースを選択し、データ量、データ品質、データ タイプなどの要素を考慮します。
- 抽出方法の選択: 増分更新や完全更新など、さまざまな抽出方法を選択できます。
- データ抽出のスケジュール: データの適時性と正確性を確保するには、時間、頻度、同時実行性、その他の要素を考慮する必要があります。
一般的に使用される SQLステートメントの例:
1 ) 全量(表)抽出
SELECT * FROM source_table;
2 ) 増分抽出 (たとえば、日付フィールドに基づく、日、月、年、またはその他のディメンションによる抽出)
SELECT * FROM source_table WHERE t_date=’20230907’;
ヒント:ビジネス ニーズに応じて、すべてのフィールドまたは指定されたフィールドを抽出します。
2.変身
ETL プロセスでは、変換には、ターゲット システムのニーズを満たすために、抽出されたデータのクリーニング、変換、フィルタリング、およびフォーマット設定が含まれます。変換の主な操作は次のとおりです。
- データ クリーニング: データの品質と正確性を確保するための重複排除、欠損値の補充、異常値の処理などの操作が含まれます。
- データ変換: データをターゲット システムのデータ構造とデータ型に適合させるための、データ型変換、フィールド計算、書式設定、およびその他の操作を含みます。
一般的に使用される SQLステートメントの例:
1 ) データ行の重複排除
--数据行去重(随机保留或者优先保留)
SELECT order_id, user, product, number
FROM (
SELECT * ,ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY proctime ASC) as row_num
FROM Orders)
WHERE row_num = 1;
-- 参数说明:
-- ROW_NUMBER(): 从第一行开始,依次为每一行分配一个唯一且连续的号码。
-- PARTITION BY col1[, col2...]: 指定分区的列,例如去重的键。
-- ORDER BY time_attr [asc|desc]: 指定排序的列。升序( ASC )排列指只保留第一行,而降序排列( DESC )则指保留最后一行。
-- WHERE rownum = 1: 取ROW_NUMBER()生成的编号1。
前回の記事を参照してください。
GaussDB データベース SQL シリーズ - データ重複排除_Gauss Squirrel Club のブログ - CSDN ブログ
2 ) 現場の清掃 (例: スペースの除去)
例外文字の処理は、TRIM()、REPLACE()、CASE WHEN… THEN… END などのキーワードまたは関数を通じて実行されます。
--清洗空格
SELECT length(' 去空格 ')
,length(TRIM(' 去空格 '))
,length(REPLACE(' 去空格 ',' ',''))
,length(CASE WHEN ' 去空格 ' <>'去空格' THEN '去空格' END);
-- 说明:
-- Trim(),通过去空格函数进行清洗
-- Replace(), 通过替换清洗
-- case when … then …end 与字典表比对进行清洗,此处的与字典表比对省略,具体根据业务需求进行。
3 ) 不正な日付のクリーニング
カレンダー テーブルを作成し、19000101 から 30001231 までのすべての日付を保存し、それらが準拠した日付形式であるかどうかを比較して判断します。
--与字典表比对
SELECT *,CASE WHEN create_date NOT IN (SELECT c_date FROM calendar) THEN 0 ELSE 1 END status FROM T1
--剔除所有非法日期行
DELETE FROM T1 WHERE status =0;
ヒント:上記の記述方法は GaussDB などのリレーショナル データベースに適しており、比較的基本的な概略的な命令ですが、具体的な命令はビジネス ニーズに応じて記述する必要があります。
3.ロード
ETL プロセスにおけるロードとは、変換されたデータをターゲット システム (通常はデータ ウェアハウスまたはデータ マート) にロードすることです。ロードの主な操作は次のとおりです。
- データマッピング。変換されたデータ (テーブル、フィールドなど) をターゲット システムにマッピングします。
- データ読み込み中。変換したデータを対象システムに読み込み、データ検証やデータ統合などを行います。
一般的に使用される SQLステートメントの例:
1 ) 増分テーブル (累積、フィールドとテーブルの 1 対 1 マッピング)
INSERT INTO target_table (column1, column2, column3) SELECT column1, column2, column3 FROM source_table;
2 ) テーブル全体 (すべての削除とすべての挿入、フィールドとテーブルの 1 対 1 マッピング)
--情况目标表
TRUNCATE table target_table;
--全量插入
INSERT INTO target_table (column1,column2,…) SELECT column1,column2,… FROM source_table;
3 ) ジョブを再実行し、指定されたパーティション データをクリアして、リロードします。
--清理表分区的数据
--清空分区etl_date
ALTER TABLE orders TRUNCATE PARTITION etl_date;
--或者清空分区etl_date=20230911。
ALTER TABLE orders TRUNCATE PARTITION for (20230911);
--插入新数据
INSERT INTO target_table (column1,column2,…,etl_date) SELECT column1,column2,…,etl_date FROM source_table;
ヒント: データのロードに関連するアルゴリズムとテーブルの設計は非常に複雑です。たとえば、履歴ジッパー テーブル (クローズド チェーン、オープン チェーン)、フル テーブル (完全な削除と完全な挿入)、増分テーブル (蓄積) などが関係します。設計にあたっては、合理性、正確性、効率性などを確保するために、データウェアハウス/データマートの全体的なアーキテクチャからスタートする必要があります。
4. DataArts Studio の概要を添付します。
Huawei Cloud GaussDB 関連のエコロジカル ツール DataArts Studio データ ガバナンス センターは、開発者による ETL スクリプトの設計、作成、管理を支援する強力な ETL ツールおよびテクノロジーです。これらの分野における DataArts Studio の主な機能と利点は次のとおりです。
- ビジュアル ETL 設計: DataArts Studio は、開発者が ETL プロセスをグラフィカルに設計および構成できる直感的なビジュアル インターフェイスを提供します。コンポーネントとコネクタをドラッグ アンド ドロップすることで、開発者は複雑なコードを記述することなく、データの抽出、変換、読み込みの手順を簡単に定義できます。
- 組み込みのデータ変換および処理機能: DataArts Studio は、データ クリーニング、データ形式変換、データの結合、データ計算などの豊富な組み込みの変換および処理コンポーネントを提供します。開発者は、独自の変換ロジックを作成することなくこれらのコンポーネントを直接使用できるため、開発が迅速化され、エラーが少なくなります。
- 強力なデータ接続および統合機能: DataArts Studio は、リレーショナル データベース、ファイル システム、クラウド ストレージ、API インターフェイスなどを含むさまざまなデータ ソースとの接続と統合をサポートします。開発者は、データ ソース接続を簡単に構成し、これらのデータ ソースから直接データを取得できます。
- 拡張可能なスクリプトと管理: DataArts Studio はビジュアルな ETL 設計インターフェイスを提供しますが、カスタム スクリプトもサポートしています。開発者は、組み込みのスクリプト エディターを使用して、特定のニーズを満たすカスタム ETL スクリプトを作成できます。さらに、DataArts Studio は、チームのコラボレーションとスクリプトのメンテナンスを容易にするために、ETL スクリプトのバージョン管理および管理機能も提供します。
- リアルタイムモニタリングとデバッグ:DataArts Studioはリアルタイムモニタリングとデバッグ機能を提供し、開発者はETLプロセスの実行状況、データ処理結果、エラーメッセージをリアルタイムに確認できます。これにより、問題を迅速に特定して解決することができ、ETL スクリプトの品質と信頼性が向上します。
5. まとめ
SQLと ETL の関係は、SQL 言語が通常、ETL プロセスのデータ抽出および変換段階で使用されることです。SQL クエリ ステートメントを使用すると、ソース データベースから必要なデータを抽出し、SQL ステートメントを使用して、ターゲット システムにロードするために必要なデータの変換と処理を実行できます。
もちろん、現在多くの企業が専用のETLツールを持っていますが、実際にはバックエンドは「PYTHON + SQL」や「PERL + SQL」などの手法で実装されており、ETLプロセスにおけるSQL処理に重点が置かれています。同様に、GaussDB データベース エコシステムにおいても不可欠であり、GaussDB データベースに関連する SQL の記述方法を習得することが不可欠です。
- 仕上げる