ロード時のデータ変換
StarRocks はロード時のデータ変換をサポートしています。
この機能は Stream Load、Broker Load、および Routine Load をサポートしていますが、Spark Load はサポートしていません。
StarRocks テーブルにデータを ロード できるのは、これらの StarRocks テーブルに対して INSERT 権限を持つユーザーのみです。INSERT 権限 を持っていない場合は、 GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに INSERT 権限を付与してください。
このトピックでは、CSV データを例にとり、ロード時にデータを抽出および変換する方法を説明します。サポートされるデータファイル形式は、選択したロード方法によって異なります。
注意
CSV データの場合、50 バイトを超えない UTF-8 文字列(カンマ(,)、タブ、パイプ(|) など)をテキスト区切り文字として使用できます。
シナリオ
データファイルを StarRocks テーブルにロードする際、データファイルのデータが完全に StarRocks テーブルのデータにマッピングされない場合があります。このような場合、データを StarRocks テーブルにロードする前に抽出または変換する必要はありません。StarRocks はロード中にデータを抽出および変換するのを支援します。
-
ロードする必要のない列をスキップします。
ロードする必要のない列をスキップできます。また、データファイルの列が StarRocks テーブルの列と異なる順序である場合、データファイルと StarRocks テーブルの間に列マッピングを作成できます。
-
ロードしたくない行をフィルタリングします。
StarRocks がロードしたくない行をフィルタリングする条件を指定できます。
-
元の列から新しい列を生成します。
生成列は、データファイルの元の列から計算される特別な列です。生成列を StarRocks テーブルの列にマッピングできます。
-
ファイルパスからパーティションフィールドの値を抽出します。
データファイルが Apache Hive™ から生成された場合、ファイルパスからパーティションフィールドの値を抽出できます。
データ例
-
ローカルファイルシステムにデータファイルを作成します。
a.
file1.csvという名前のデータファイルを作成します。このファイルは、ユーザーID、ユーザー性別、イベント日付、イベントタイプを順に表す4つの列で構成されています。354,female,2020-05-20,1
465,male,2020-05-21,2
576,female,2020-05-22,1
687,male,2020-05-23,2b.
file2.csvという名前のデータファイルを作成します。このファイルは、日付を表す1つの列のみで構成されています。2020-05-20
2020-05-21
2020-05-22
2020-05-23 -
StarRocks データベース
test_dbにテーブルを作成します。注意
バージョン v2.5.7 以降、StarRocks はテーブルを作成する際やパーティションを追加する際に、バケット数 (BUCKETS) を自動的に設定できます。バケット数を手動で設定する必要はありません。詳細は バケット数の決定 を参照してください。
a.
table1という名前のテーブルを作成します。このテーブルは、event_date、event_type、user_idの3つの列で構成されています。MySQL [test_db]> CREATE TABLE table1
(
`event_date` DATE COMMENT "event date",
`event_type` TINYINT COMMENT "event type",
`user_id` BIGINT COMMENT "user ID"
)
DISTRIBUTED BY HASH(user_id);b.
table2という名前のテーブルを作成します。このテーブルは、date、year、month、dayの4つの列で構成されています。MySQL [test_db]> CREATE TABLE table2
(
`date` DATE COMMENT "date",
`year` INT COMMENT "year",
`month` TINYINT COMMENT "month",
`day` TINYINT COMMENT "day"
)
DISTRIBUTED BY HASH(date); -
file1.csvとfile2.csvを HDFS クラスターの/user/starrocks/data/input/パスにアップロードし、file1.csvのデータを Kafka クラスターのtopic1に、file2.csvのデータをtopic2に公開します。
ロードする必要のない列をスキップ
StarRocks テーブルにロードしたいデータファイルには、StarRocks テーブルの列にマッピングできない列が含まれている場合があります。このような場合、StarRocks はデータファイルから StarRocks テーブルの列にマッピングできる列のみをロードすることをサポートしています。
この機能は、以下のデータソースからのデータロードをサポートしています。
-
ローカルファイルシステム
-
HDFS およびクラウドストレージ
注意
このセクションでは HDFS を例に使用しています。
-
Kafka
ほとんどの場合、CSV ファイルの列には名前が付けられていません。一部の CSV ファイルでは、最初の行が列名で構成されていますが、StarRocks は最初の行の内容を列名ではなく一般的なデータとして処理します。したがって、CSV ファイルをロードする際には、ジョブ作成ステートメントまたはコマンドで CSV ファイルの列を一時的に順番に名前付けする必要があります。これらの一時的に名前付けされた列は、StarRocks テーブルの列に 名前で マッピングされます。データファイルの列に関する次の点に注意してください。
-
StarRocks テーブルの列にマッピングでき、StarRocks テーブルの列の名前を使用して一時的に名前付けされた列のデータは、直接ロードされます。
-
StarRocks テーブルの列にマッピングできない列は無視され、これらの列のデータはロードされません。
-
一部の列が StarRocks テーブルの列にマッピングできるが、ジョブ作成ステートメントまたはコマンドで一時的に名前付けされていない場合、ロードジョブはエラーを報告します。
このセクションでは、file1.csv と table1 を例に使用します。file1.csv の4つの列は、順に user_id、user_gender、event_date、event_type として一時的に名前付けされています。file1.csv の一時的に名前付けされた列の中で、user_id、event_date、event_type は table1 の特定の列にマッピングできますが、user_gender は table1 のどの列にもマッピングできません。したがって、user_id、event_date、event_type は table1 にロードされますが、user_gender はされません。