AnalyticDB for MySQLでは、外部テーブルを使用してデータをインポートおよびエクスポートできます。 このトピックでは、外部テーブルを使用してApsara File Storage for HDFSデータを照会し、そのデータをAnalyticDB for MySQL data Warehouse Edition (V3.0) にインポートする方法について説明します。
前提条件
AnalyticDB for MySQLクラスターはV3.1.4.4以降を実行します。
説明クラスターのマイナーバージョンをクエリする方法については、AnalyticDB for MySQLクラスターのバージョンを照会するにはどうすればよいですか? クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。
Apsara File Storage for HDFSデータファイルは、CSV、Parquet、またはORC形式です。
Apsara File Storage for HDFSクラスターが作成され、インポートするデータはApsara File Storage for HDFSフォルダーに保存されます。 この例では、データはhdfs_import_test_data.csvフォルダに格納されています。
Apsara File Storage for HDFSクラスターでは、AnalyticDB for MySQLクラスターの次のサービスアクセスポートが設定されています。
namenode
: ファイルシステムのメタデータの読み取りと書き込みに使用されます。 fs.de faultFSパラメーターを使用して、ポート番号を設定できます。 デフォルトのポート番号は8020です。詳細な設定については、「core-default.xml」をご参照ください。
datanode
: データの読み取りと書き込みに使用されます。 dfs.datanode.addressパラメーターを使用して、ポート番号を設定できます。 デフォルトのポート番号は50010です。詳細な設定については、「hdfs-default.xml」をご参照ください。
AnalyticDB for MySQLクラスターがエラスティックモードの場合、クラスター情報 ページの ネットワーク情報 セクションでEniネットワークをオンにする必要があります。
手順
AnalyticDB for MySQLクラスターに接続します。 詳細については、「AnalyticDB For MySQLクラスターへの接続」をご参照ください。
データベースを作成します。 詳細については、「データベースの作成」をご参照ください。
この例では、
adb_demo
という名前のデータベースがAnalyticDB for MySQLクラスターに作成されます。Create table
ステートメントを実行して、ターゲットデータベースadb_demo
にCSV、Parquet、またはORC形式の外部テーブルを作成します。標準の外部テーブルを作成するには、このトピックの「HDFS外部テーブル用のApsaraファイルストレージの作成」を参照してください。
パーティション化外部テーブルを作成するには、このトピックの「HDFS外部テーブル用のパーティション化Apsaraファイルストレージの作成」をご参照ください。
宛先テーブルを作成します。
次のいずれかのステートメントを実行して、Apsara File Storage for HDFSからインポートされたデータを保存するための保存先データベース
adb_demo
に保存先テーブルを作成できます。次のステートメントは、標準外部テーブルに対応する宛先テーブルを作成する方法を示しています。 この例では、ターゲットテーブルの名前は
adb_hdfs_import_test
です。が存在しない場合はテーブルを作成します。adb_hdfs_import_test ( uid文字列、 その他の文字列 ) ハッシュによって分布 (uid);
次のステートメントは、パーティション化された外部テーブルに対応する宛先テーブルを作成する方法を示しています。 この例では、ターゲットテーブルの名前は
adb_hdfs_import_parquet_partition
です。 テーブルを作成するには、通常の列 (uid
やother
など) とパーティション列 (p1
、p2
、p3
など) をステートメントに定義する必要があります。が存在しない場合はテーブルを作成します。adb_hdfs_import_parquet_partition ( uid文字列、 その他の文字列、 p1日付、 p2 int, p3 varchar ) ハッシュによって分布 (uid);
Apsara File Storage for HDFSから移行先のAnalyticDB for MySQLクラスターにデータをインポートします。
次のいずれかの方法でデータをインポートできます。 パーティションテーブルを使用してデータをインポートする構文は、標準テーブルを使用してデータをインポートする構文と同じです。
方法1 (推奨):
INSERT OVERWRITE
ステートメントを実行してデータをインポートします。 この方法では、データを一括インポートでき、パフォーマンスが向上します。 インポートが成功すると、データはクエリに使用できます。 それ以外の場合、データは以前の状態にロールバックされます。 例:INSERT OVERWRITE adb_hdfs_import_test SELECT * からhdfs_import_test_external_table;
方法2:
INSERT INTO
ステートメントを実行してデータをインポートします。 この方法では、インポートされたデータをリアルタイムでクエリできます。 この方法は、少量のデータをインポートする場合に適しています。 例:adb_hdfs_import_testに挿入 SELECT * からhdfs_import_test_external_table;
方法3: 非同期タスクを送信してデータをインポートします。 例:
ジョブ挿入の上書きを送信adb_hdfs_import_test SELECT * からhdfs_import_test_external_table;
次の情報が返されます。
+ --------------------------------------- + | job_id | + --------------------------------------- + | 2020112122202917203100908203303 ****** | + --------------------------------------- +
job_id
の値に基づいて、非同期タスクの状態を確認できます。 詳細については、「インポートタスクの非同期送信」をご参照ください。
次のステップ
データのインポート後、AnalyticDB for MySQLクラスターのターゲットデータベースadb_demo
にログインし、次のステートメントを実行して、データがソーステーブルからターゲットテーブルadb_hds_import_test
にインポートされているかどうかを確認します。
SELECT * からadb_hdfs_import_test LIMIT 100;
HDFS外部テーブル用のApsaraファイルストレージの作成
CSV形式で外部テーブルを作成
次のステートメントは、CSV形式で外部テーブルを作成する方法を示しています。
が存在しない場合はテーブルを作成しますhdfs_import_test_external_table ( uid文字列、 その他の文字列 ) エンジン='HDFS' TABLE_PROPERTIES='{ "format":"csv" 、 "delimiter":",", "hdfs_url":"hdfs:// 172.17。***:9000/adb/hdfs_import_test_csv_data/hdfs_import_test_data.csv" } ';
パラメーター
必須
説明
エンジン='HDFS '
可
外部テーブルに使用されるストレージエンジン。 この例では、HDFSがストレージエンジンとして使用されています。
テーブル_プロパティ
AnalyticDB for MySQLがApsara File Storage for HDFSデータにアクセスするために使用する接続情報。
形式
データファイルの形式。 CSV形式で外部テーブルを作成する場合、このパラメーターを
csv
に設定する必要があります。区切り文字
CSVファイルの列区切り文字。 この例では、区切り文字としてコンマ (,) を使用しています。
hdfs_url
Apsara file Storage for HDFSクラスター内の宛先データファイルまたはフォルダーの絶対URL。 URLは
hdfs://
で始める必要があります。例:
hdfs:// 172.17.***.***:9000/adb/hdfs_import_test_csv_data/hdfs_import_test_data.csv
partition_column
任意
外部テーブルのパーティション列。 複数の列はコンマ (,) で区切ります。 パーティション列を定義する方法の詳細については、このトピックの「HDFS外部テーブル用のパーティション分割されたApsaraファイルストレージの作成」を参照してください。
compress_type
データファイルの圧縮タイプ。 CSVファイルではGZIP圧縮タイプのみがサポートされています。
skip_header_line_count
データをインポートするときにスキップするヘッダー行の数。 CSVファイルの最初の行はテーブルヘッダーです。 このパラメーターを1に設定すると、データをインポートするときにファイルの最初の行がスキップされます。
このパラメーターのデフォルト値は0で、行がスキップされないことを示します。
hdfs_ha_host_port
Apsara File Storage for HDFSクラスターに高可用性 (HA) 機能が設定されている場合、外部テーブルを作成するときに
hdfs_ha_host_port
パラメーターをip1:port1,ip2:port2
形式で指定する必要があります。 このパラメーターには、プライマリおよびセカンダリのNameNodes
のIPアドレスとポート番号が指定されています。例:
192.168.xx.xx:8020,192.168.xx.xx:8021
ParquetまたはORC形式で外部テーブルを作成する
次のステートメントは、Parquet形式で外部テーブルを作成する方法を示しています。
が存在しない場合はテーブルを作成しますhdfs_import_test_external_table ( uid文字列、 その他の文字列 ) エンジン='HDFS' TABLE_PROPERTIES='{ "format":"parquet" 、 "hdfs_url":"hdfs:// 172.17.***.***:9000/adb/hdfs_import_test_parquet_data/" } ';
パラメーター
必須
説明
エンジン='HDFS '
可
外部テーブルに使用されるストレージエンジン。 この例では、HDFSがストレージエンジンとして使用されています。
テーブル_プロパティ
AnalyticDB for MySQLがApsara File Storage for HDFSデータにアクセスするために使用する接続情報。
形式
データファイルの形式。
Parquet形式で外部テーブルを作成する場合、このパラメーターを
parquet
に設定する必要があります。ORC形式で外部テーブルを作成する場合、このパラメーターを
orc
に設定する必要があります。
hdfs_url
Apsara file Storage for HDFSクラスター内の宛先データファイルまたはフォルダーの絶対URL。 URLは
hdfs://
で始める必要があります。partition_column
任意
テーブルのパーティション列。 複数の列はコンマ (,) で区切ります。 パーティション列を定義する方法の詳細については、このトピックの「HDFS外部テーブル用のパーティション分割されたApsaraファイルストレージの作成」を参照してください。
hdfs_ha_host_port
Apsara File Storage for HDFSクラスターに高可用性 (HA) 機能が設定されている場合、外部テーブルを作成するときに
hdfs_ha_host_port
パラメーターをip1:port1,ip2:port2
形式で指定する必要があります。 このパラメーターには、プライマリおよびセカンダリのNameNodes
のIPアドレスとポート番号が指定されています。例:
192.168.xx.xx:8020,192.168.xx.xx:8021
説明外部テーブルを作成するためにステートメントで使用される列名は、ParquetまたはORCファイルの列名と同じである必要があります。 列名は大文字と小文字を区別しません。 ステートメントの列の順序は、ParquetまたはORCファイルの列の順序と同じである必要があります。
外部テーブルを作成するときは、ParquetファイルまたはORCファイルの特定の列のみを外部テーブルの列として選択できます。 ParquetファイルまたはORCファイルで選択されていない列はインポートされません。
外部テーブルの作成に使用されるステートメントにParquetまたはORCファイルにない列が含まれている場合、この列にはNULLが返されます。
次の表は、ParquetとAnalyticDB for MySQL V3.0のデータ型間のマッピングを示しています。
基本タイプin Parquet
Parquetの論理型
AnalyticDB for MySQL V3.0のデータ型
BOOLEAN
N/A
BOOLEAN
INT32
INT_8
TINYINT
INT32
INT_16
SMALLINT
INT32
N/A
INTまたはINTEGER
INT64
N/A
BIGINT
FLOAT
N/A
FLOAT
DOUBLE
N/A
DOUBLE
FIXED_LEN_BYTE_ARRAY
BINARY
INT64
INT32
DECIMAL
DECIMAL
BINARY
UTF-8
VARCHAR
STRING
JSON (Parquet形式のオブジェクトにJSON形式の列が含まれている場合に使用できます)
INT32
日付
日付
INT64
TIMESTAMP_MILLIS
TIMESTAMPまたはDATETIME
INT96
N/A
TIMESTAMPまたはDATETIME
重要STRUCT
データ型の列を使用するParquet外部テーブルは作成できません。次の表は、ORCとAnalyticDB for MySQL V3.0のデータ型間のマッピングを示しています。
ORCのデータ型
AnalyticDB for MySQL V3.0のデータ型
BOOLEAN
BOOLEAN
BYTE
TINYINT
短い
SMALLINT
INT
INTまたはINTEGER
LONG
BIGINT
DECIMAL
DECIMAL
FLOAT
FLOAT
DOUBLE
DOUBLE
BINARY
STRING
VARCHAR
VARCHAR
STRING
JSON (ORC形式のオブジェクトにJSON形式の列が含まれている場合に使用できます)
TIMESTAMP
TIMESTAMPまたはDATETIME
日付
日付
重要LIST
、STRUCT
、またはUNION
データ型の列を使用するORC外部テーブルは作成できません。MAP
データ型の列を使用するORC外部テーブルは作成できますが、照会はできません。
HDFS外部テーブル用のパーティション分割Apsaraファイルストレージの作成
Apsara File Storage for HDFSは、Parquet、CSV、またはORC形式のデータを分割できます。 パーティションを含むデータの階層ディレクトリを生成します。 次の例では、p1
はレベル1パーティション、p2
はレベル2パーティション、p3
はレベル3パーティションを示します。
parquet_partition_classic /
â ─ ─ p1=2020-01-01
│ ├─ ─ p2=4
│ │ ├─ ─ p3=上海
│ │ │ ├─ 000000_0
│ │ │ ά ─ 000000_1
│ │ 様 ─ ─ p3=深セン
│ │ ά ─ ─ 000000_0
│ õ ─ ─ p2=6
│ õ ─ ─ p3=深セン
│ └ ─ ─ 000000_0
â ─ ─ p1=2020-01-02
│ õ ─ ─ p2=8
│ ├─ ─ p3=上海
│ │ ά ─ ─ 000000_0
│ õ ─ ─ p3=深セン
│ └ ─ ─ 000000_0
└ ─ ─ p1=2020-01-03
└ ─ ─ p2=6
â ─ ─ p2=杭州
└ ─ ─ p3=深セン
└ ─ ─ 000000_0
次のステートメントは、外部テーブルを作成し、外部テーブルでパーティション列を指定する方法を示しています。 この例では、Parquetファイルが使用されます。
が存在しない場合はテーブルを作成しますhdfs_parquet_partition_table
(
uid varchar,
その他のvarchar,
p1日付、
p2 int,
p3 varchar
)
エンジン='HDFS'
TABLE_PROPERTIES='{
"hdfs_url":"hdfs:// 172.17。*** 。**:9000/adb/parquet_partition_classic/"、
"format":"parquet", // ファイルの形式を指定します。 CSVまたはORCファイルを作成するには、形式値をcsvまたはorcに変更します。
"partition_column":"p1, p2, p3" // Apsara File Storage for HDFSデータをパーティションごとにクエリする場合は、AnalyticDB for MySQLにデータをインポートするときに外部テーブルを作成するために使用するステートメントにpartition_columnパラメーターを指定する必要があります。
}';
TABLE_PROPERTIES
のpartition_columnプロパティは、パーティション列 (例ではp1、p2、p3など) を宣言する必要があります。 partition_columnで指定されるパーティション列のシーケンスは、外部テーブルの作成に使用されるステートメントで定義されているパーティション列のシーケンスと同じである必要があります。外部テーブルでパーティション列を定義する場合は、パーティションを含む列 (例のp1、p2、p3など) とそのデータ型を指定する必要があります。 ステートメントの最後にパーティション列を指定する必要があります。
外部テーブルの作成に使用されるステートメントで定義されているパーティション列の順序は、partition_columnプロパティで指定されているパーティション列の順序と同じである必要があります。
パーティション列は、
BOOLEAN
、TINYINT
、SMALLINT
、INT
、INTEGER
、BIGINT
、FLOAT
、DOUBLE
、DECIMAL
、VARCHAR
、STRING
、DATE
、およびTIMESTAMP
をサポートします。パーティション列のクエリに使用される構文と、クエリ結果の表示方法は、他の列と同じです。
formatパラメーターが指定されていない場合は、CSV形式が使用されます。