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

AnalyticDB:外部テーブルを使用してデータをdata Warehouse Editionにインポートする

最終更新日:Jun 12, 2024

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ネットワークをオンにする必要があります。启用ENI网络

手順

  1. AnalyticDB for MySQLクラスターに接続します。 詳細については、「AnalyticDB For MySQLクラスターへの接続」をご参照ください。

  2. データベースを作成します。 詳細については、「データベースの作成」をご参照ください。

    この例では、adb_demoという名前のデータベースがAnalyticDB for MySQLクラスターに作成されます。

  3. Create tableステートメントを実行して、ターゲットデータベースadb_demoにCSV、Parquet、またはORC形式の外部テーブルを作成します。

  4. 宛先テーブルを作成します。

    次のいずれかのステートメントを実行して、Apsara File Storage for HDFSからインポートされたデータを保存するための保存先データベースadb_demoに保存先テーブルを作成できます。

    • 次のステートメントは、標準外部テーブルに対応する宛先テーブルを作成する方法を示しています。 この例では、ターゲットテーブルの名前はadb_hdfs_import_testです。

      が存在しない場合はテーブルを作成します。adb_hdfs_import_test
      (
          uid文字列、
          その他の文字列
      )
      ハッシュによって分布 (uid); 
    • 次のステートメントは、パーティション化された外部テーブルに対応する宛先テーブルを作成する方法を示しています。 この例では、ターゲットテーブルの名前はadb_hdfs_import_parquet_partitionです。 テーブルを作成するには、通常の列 (uidotherなど) とパーティション列 (p1p2p3など) をステートメントに定義する必要があります。

      が存在しない場合はテーブルを作成します。adb_hdfs_import_parquet_partition
      (
          uid文字列、
          その他の文字列、
          p1日付、
          p2 int,
          p3 varchar
      )
      ハッシュによって分布 (uid); 
  5. 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

    日付

    日付

    重要

    LISTSTRUCT、または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_PROPERTIESpartition_columnプロパティは、パーティション列 (例ではp1、p2、p3など) を宣言する必要があります。 partition_columnで指定されるパーティション列のシーケンスは、外部テーブルの作成に使用されるステートメントで定義されているパーティション列のシーケンスと同じである必要があります。

  • 外部テーブルでパーティション列を定義する場合は、パーティションを含む列 (例のp1、p2、p3など) とそのデータ型を指定する必要があります。 ステートメントの最後にパーティション列を指定する必要があります。

  • 外部テーブルの作成に使用されるステートメントで定義されているパーティション列の順序は、partition_columnプロパティで指定されているパーティション列の順序と同じである必要があります。

  • パーティション列は、BOOLEANTINYINTSMALLINTINTINTEGERBIGINTFLOATDOUBLEDECIMALVARCHARSTRINGDATE、およびTIMESTAMPをサポートします。

  • パーティション列のクエリに使用される構文と、クエリ結果の表示方法は、他の列と同じです。

  • formatパラメーターが指定されていない場合は、CSV形式が使用されます。