ロード時のデータ変換
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 はされません。