すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:外部テーブルを使用した HDFS データのインポート

最終更新日:Mar 29, 2026

AnalyticDB for MySQL の外部テーブルは、ご利用の Hadoop 分散ファイルシステム (HDFS) とのブリッジとして機能します。HDFS ファイルに対応する外部テーブルを作成し、INSERT SELECT 文を実行してデータを AnalyticDB for MySQL のネイティブテーブルにロードします。

前提条件

作業を開始する前に、以下の内容を確認してください。

クラスター要件:

  • お客様の AnalyticDB for MySQL クラスターは、カーネルバージョン 3.1.4 以降を実行しています。バージョンの確認および更新を行うには、AnalyticDB for MySQL コンソール にログインし、[設定情報] セクションに移動します。[クラスター情報] ページの。手順については、「クラスターのマイナーバージョンを更新する」をご参照ください。

  • ご利用のクラスターは、エラスティックモードで実行されているデータウェアハウスエディションである必要があります。ENI アクセスにはエラスティックモードが必要です。

HDFS 要件:

  • ご利用の HDFS データファイルは、CSV、Parquet、または ORC 形式である必要があります。

  • ご利用の HDFS クラスターが実行中であり、インポート対象のデータが HDFS ディレクトリ内に存在している必要があります。本トピックでは、例として hdfs_import_test_data.csv を使用します。

  • AnalyticDB for MySQL からのアクセスのために、HDFS クラスターで以下のサービスポートが開放されている必要があります。

    • NameNode:ファイルシステムのメタデータを管理します。デフォルトポート:8020。設定は fs.defaultFS を通じて行います。「core-default.xml」をご参照ください。

    • DataNode:データの読み取りおよび書き込みを処理します。デフォルトポート:50010。設定は dfs.datanode.address を通じて行います。「hdfs-default.xml」をご参照ください。

ネットワーク構成:

データをインポートする前に、ご利用のクラスターで ENI アクセスを有効化してください。

  1. AnalyticDB for MySQL コンソール にログインします。

  2. クラスター情報 ページで、ネットワーク情報 セクションに移動します。

  3. Elastic Network Interface (ENI) スイッチをオンにします。

重要

ENI の有効化または無効化により、約 2 分間データベース接続が中断されます。この間、読み取りおよび書き込み操作は利用できません。変更はメンテナンスウィンドウ中に計画してください。

HDFS データのインポート

ステップ 1:ターゲットデータベースの作成

CREATE DATABASE IF NOT EXISTS adb_demo;

ステップ 2:HDFS 外部テーブルの作成

adb_demo データベース内で、ご利用の HDFS データに対応する外部テーブルを作成します。ご利用のファイル形式に一致するタブを選択してください。

CSV:

CREATE TABLE IF NOT EXISTS hdfs_import_test_external_table
(
    uid string,
    other string
)
ENGINE='HDFS'
TABLE_PROPERTIES='{
    "format":"csv",
    "delimiter":",",
    "hdfs_url":"hdfs://172.17.***.***:9000/adb/hdfs_import_test_csv_data/hdfs_import_test_data.csv"
}';

Parquet:

CREATE TABLE IF NOT EXISTS hdfs_import_test_external_table
(
    uid string,
    other string
)
ENGINE='HDFS'
TABLE_PROPERTIES='{
    "format":"parquet",
    "hdfs_url":"hdfs://172.17.***.***:9000/adb/hdfs_import_test_parquet_data/"
}';

ORC: Parquet と同じ構文を使用しますが、"format":"orc" に設定します。

TABLE_PROPERTIES で使用可能なすべてのパラメーターについては、「外部テーブルのパラメーター」をご参照ください。

ステップ 3:送信先テーブルの作成

インポートされたデータを格納するための AnalyticDB for MySQL のネイティブテーブルを作成します。

標準テーブル:

CREATE TABLE IF NOT EXISTS adb_hdfs_import_test
(
    uid string,
    other string
)
DISTRIBUTED BY HASH(uid);

パーティションテーブル — データ列とパーティションキー列の両方を含める必要があります。パーティションキー列は列リストの末尾に記述してください。

CREATE TABLE IF NOT EXISTS adb_hdfs_import_parquet_partition
(
    uid string,
    other string,
    p1 date,
    p2 int,
    p3 varchar
)
DISTRIBUTED BY HASH(uid);

ステップ 4:データのインポート

以下のいずれかの方法を選択してください。標準テーブルとパーティションテーブルのどちらでも構文は同じです。

方法コマンド使用タイミング
INSERT OVERWRITE(推奨)INSERT OVERWRITE <dest_table> SELECT * FROM <external_table>大規模なデータセット。高スループットでのバッチインポートをサポートします。インポートが成功した場合のみデータが表示され、失敗時はロールバックされます。
INSERT INTOINSERT INTO <dest_table> SELECT * FROM <external_table>小規模なデータセット。挿入された行はすぐにクエリで利用可能になります。
非同期タスクSUBMIT JOB INSERT OVERWRITE <dest_table> SELECT * FROM <external_table>長時間実行されるインポート。すぐに job_id が返されるため、進行状況をモニターできます。

例 — INSERT OVERWRITE:

INSERT OVERWRITE adb_hdfs_import_test
SELECT * FROM hdfs_import_test_external_table;

例 — 非同期タスク:

SUBMIT JOB INSERT OVERWRITE adb_hdfs_import_test
SELECT * FROM hdfs_import_test_external_table;

コマンドは job_id を返します。

+---------------------------------------+
| job_id                                |
+---------------------------------------+
| 2020112122202917203100908203303****** |
+---------------------------------------+

job_id を使用してインポートのステータスを確認します。詳細については、「インポートタスクを非同期で送信する」をご参照ください。

インポート結果の確認

インポート完了後、adb_demo に対して以下のクエリを実行し、データが正しくロードされたことを確認します。

SELECT * FROM adb_hdfs_import_test LIMIT 100;

パーティション化された HDFS 外部テーブルの作成

HDFS データが階層的なディレクトリ構造で整理されている場合は、パーティション化された外部テーブルを使用します。HDFS は Parquet、CSV、および ORC 形式のパーティション化されたデータをサポートしています。パーティションは次のようなディレクトリ階層を形成します。

parquet_partition_classic/
├── p1=2020-01-01
│   ├── p2=4
│   │   ├── p3=SHANGHAI
│   │   │   ├── 000000_0
│   │   │   └── 000000_1
│   │   └── p3=SHENZHEN
│   │       └── 000000_0
│   └── p2=6
│       └── p3=SHENZHEN
│           └── 000000_0
├── p1=2020-01-02
│   └── p2=8
│       ├── p3=SHANGHAI
│       │   └── 000000_0
│       └── p3=SHENZHEN
│           └── 000000_0
└── p1=2020-01-03
    └── p2=6
        ├── p2=HANGZHOU
        └── p3=SHENZHEN
            └── 000000_0

次の文は、このパーティション化された Parquet データセット用の外部テーブルを作成します。

CREATE TABLE IF NOT EXISTS hdfs_parquet_partition_table
(
  uid varchar,
  other varchar,
  p1 date,
  p2 int,
  p3 varchar
)
ENGINE='HDFS'
TABLE_PROPERTIES='{
  "hdfs_url":"hdfs://172.17.***.**:9000/adb/parquet_partition_classic/",
  "format":"parquet",
  "partition_column":"p1, p2, p3"
}';

CSV または ORC データを使用する場合は、"format""csv" または "orc" に変更します。format を省略した場合、デフォルトで CSV が使用されます。

パーティション化された外部テーブルのルール:

  • partition_column プロパティには、ディレクトリ階層に現れる順序でパーティションキー列を列挙します。順序は正確に一致させる必要があります。

  • CREATE TABLE 文でパーティションキー列を定義し、すべてのデータ列の後に列リストの末尾に配置します。

  • パーティションキー列は、以下のデータ型をサポートします:BOOLEANTINYINTSMALLINTINTINTEGERBIGINTFLOATDOUBLEDECIMALVARCHARSTRINGDATE、および TIMESTAMP

  • パーティションキー列はクエリ内で通常の列と同様に動作し、SELECT やフィルターに使用できます。

  • その他の TABLE_PROPERTIES パラメーターについては、「CSV パラメーター表」または「Parquet/ORC パラメーター表」をご参照ください。

外部テーブルのパラメーター

CSV パラメーター

パラメーター必須説明
ENGINE='HDFS'はいストレージエンジンを HDFS に設定します。
TABLE_PROPERTIESはいHDFS 接続およびフォーマット設定を含む JSON オブジェクトです。
formatいいえファイル形式。csv に設定します。省略した場合、デフォルトで CSV が使用されます。
delimiterいいえ列のデリミタ文字。デフォルト:,
hdfs_urlはいHDFS ファイルまたはディレクトリへの絶対パス。hdfs:// で始まる必要があります。例:hdfs://172.17.*.*:9000/adb/data/file.csv
partition_columnいいえパーティションキー列のカンマ区切りリスト。パーティション化されたデータには必須です。
compress_typeいいえ圧縮形式。CSV は Gzip のみをサポートします。
skip_header_line_countいいえスキップするヘッダー行数。列ヘッダー行をスキップするには 1 に設定します。デフォルト:0
hdfs_ha_host_portいいえ高可用性 (HA) クラスター向けの NameNode IP アドレスおよびポート。形式:ip1:port1,ip2:port2。例:192.168.xx.xx:8020,192.168.xx.xx:8021

Parquet および ORC パラメーター

パラメーター必須説明
ENGINE='HDFS'はいストレージエンジンを HDFS に設定します。
TABLE_PROPERTIESはいHDFS 接続およびフォーマット設定を含む JSON オブジェクトです。
formatはいファイル形式。parquet または orc に設定します。
hdfs_urlはいHDFS ファイルまたはディレクトリへの絶対パス。hdfs:// で始まる必要があります。
partition_columnいいえパーティションキー列のカンマ区切りリスト。パーティション化されたデータには必須です。
hdfs_ha_host_portいいえHA クラスター向けの NameNode IP アドレスおよびポート。形式:ip1:port1,ip2:port2

Parquet および ORC ファイルの列マッピングルール:

  • CREATE TABLE 文の列名は、ファイル内の列名と一致する必要があります(大文字・小文字は区別されません)。また、列の順序も一致させる必要があります。

  • ファイル内の列の一部のみを含めることができます。除外された列はインポートされません。

  • CREATE TABLE 文でファイルに存在しない列を参照した場合、その列に対するクエリは NULL を返します。

制限事項

  • CSV 外部テーブルは Gzip 圧縮のみをサポートします。

  • Parquet 外部テーブルは STRUCT 型の列を使用できません。

  • ORC 外部テーブルは LISTSTRUCT、または UNION 型を使用できません。MAP 型はテーブル作成時に使用できますが、クエリはできません。

データ型のマッピング

Parquet から AnalyticDB for MySQL

Parquet の基本型Parquet の論理型AnalyticDB for MySQL のデータ型
BOOLEAN該当なしBOOLEAN
INT32INT_8TINYINT
INT32INT_16SMALLINT
INT32該当なしINT または INTEGER
INT64該当なしBIGINT
FLOAT該当なしFLOAT
DOUBLE該当なしDOUBLE
FIXED_LEN_BYTE_ARRAY、BINARY、INT64、または INT32DECIMALDECIMAL
BINARYUTF-8VARCHAR、STRING、または JSON(Parquet オブジェクトに JSON 型の列が含まれている場合に利用可能)
INT32DATEDATE
INT64TIMESTAMP_MILLISTIMESTAMP または DATETIME
INT96該当なしTIMESTAMP または DATETIME

ORC から AnalyticDB for MySQL

ORC のデータ型AnalyticDB for MySQL のデータ型
BOOLEANBOOLEAN
BYTETINYINT
SHORTSMALLINT
INTINT または INTEGER
LONGBIGINT
DECIMALDECIMAL
FLOATFLOAT
DOUBLEDOUBLE
BINARY、STRING、または VARCHARVARCHAR、STRING、または JSON(ORC オブジェクトに JSON 型の列が含まれている場合に利用可能)
TIMESTAMPTIMESTAMP または DATETIME
DATEDATE

次のステップ