全部产品
Search
文档中心

AnalyticDB:Gunakan tabel eksternal untuk mengimpor data HDFS

更新时间:Oct 22, 2025

AnalyticDB for MySQL mendukung penggunaan tabel eksternal untuk mengimpor dan mengekspor data. Topik ini menjelaskan cara menggunakan tabel eksternal untuk menanyakan data dari Sistem File Terdistribusi Hadoop (HDFS) dan mengimpornya ke dalam AnalyticDB for MySQL.

Prasyarat

  • Kluster AnalyticDB for MySQL harus menjalankan versi kernel 3.1.4 atau yang lebih baru.

    Catatan

    Untuk melihat dan memperbarui versi minor kluster AnalyticDB for MySQL, masuk ke Konsol AnalyticDB for MySQL dan buka bagian Configuration Information pada halaman Cluster Information.

  • File data HDFS harus berada dalam format CSV, Parquet, atau ORC.

  • Kluster HDFS telah dibuat dan data yang akan diimpor telah disiapkan dalam folder HDFS. Topik ini menggunakan folder hdfs_import_test_data.csv sebagai contoh.

  • Port akses layanan berikut dikonfigurasikan dalam kluster HDFS untuk kluster AnalyticDB for MySQL:

    • namenode: Membaca dan menulis metadata sistem file. Anda dapat mengonfigurasi nomor port dalam parameter fs.defaultFS. Port defaultnya adalah 8020.

      Untuk informasi lebih lanjut tentang konfigurasi, lihat core-default.xml.

    • datanode: Membaca dan menulis data. Anda dapat mengonfigurasi nomor port dalam parameter dfs.datanode.address. Port defaultnya adalah 50010.

      Untuk informasi lebih lanjut tentang konfigurasi, lihat hdfs-default.xml.

  • AnalyticDB for MySQL Data Warehouse Edition dalam mode elastis mendukung akses Elastic Network Interface (ENI).

    Penting
    • Masuk ke Konsol AnalyticDB for MySQL. Pada halaman Cluster Information, di bagian Network Information, aktifkan sakelar Elastic Network Interface (ENI).

    • Mengaktifkan atau menonaktifkan jaringan ENI mengganggu koneksi database selama sekitar 2 menit. Selama waktu ini, operasi baca dan tulis tidak tersedia. Evaluasi dampaknya sebelum Anda mengaktifkan atau menonaktifkan jaringan ENI.

Prosedur

  1. Buat database tujuan. Dalam contoh ini, database tujuan dalam kluster AnalyticDB for MySQL diberi nama adb_demo.

    CREATE DATABASE IF NOT EXISTS adb_demo;    
  2. Dalam database tujuan adb_demo, gunakan pernyataan CREATE TABLE untuk membuat tabel eksternal dalam format CSV, Parquet, atau ORC.

  3. Buat tabel tujuan.

    Gunakan salah satu pernyataan berikut untuk membuat tabel tujuan dalam database tujuan adb_demo untuk menyimpan data yang diimpor dari HDFS:

    • Buat tabel tujuan untuk tabel eksternal standar. Dalam contoh ini, tabel tujuan diberi nama adb_hdfs_import_test. Sintaksnya adalah sebagai berikut:

      CREATE TABLE IF NOT EXISTS adb_hdfs_import_test
      (
          uid string,
          other string
      )
      DISTRIBUTED BY HASH(uid);
    • Saat Anda membuat tabel tujuan untuk tabel eksternal terpartisi, Anda harus mendefinisikan kolom standar, seperti uid dan other, serta kolom kunci partisi, seperti p1, p2, dan p3. Dalam contoh ini, tabel tujuan diberi nama adb_hdfs_import_parquet_partition. Sintaksnya adalah sebagai berikut:

      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. Impor data dari HDFS ke dalam kluster AnalyticDB for MySQL tujuan.

    Pilih metode untuk mengimpor data sesuai kebutuhan. Sintaks untuk mengimpor data ke dalam tabel terpartisi sama dengan untuk tabel standar. Contoh berikut menggunakan tabel standar:

    • Metode 1 (Direkomendasikan): Gunakan INSERT OVERWRITE untuk mengimpor data. Metode ini mendukung impor batch dan memberikan performa tinggi. Data terlihat setelah impor berhasil. Jika impor gagal, data akan dikembalikan. Kode berikut memberikan contoh:

      INSERT OVERWRITE adb_hdfs_import_test
      SELECT * FROM hdfs_import_test_external_table;
    • Metode 2: Gunakan INSERT INTO untuk mengimpor data. Data yang dimasukkan tersedia untuk kueri real-time. Gunakan metode ini untuk jumlah data yang kecil. Kode berikut memberikan contoh:

      INSERT INTO adb_hdfs_import_test
      SELECT * FROM hdfs_import_test_external_table;
    • Metode 3: Jalankan tugas asinkron untuk mengimpor data. Kode berikut memberikan contoh:

      SUBMIT JOB INSERT OVERWRITE adb_hdfs_import_test
      SELECT * FROM hdfs_import_test_external_table;

      Hasil berikut dikembalikan:

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

      Anda juga dapat memeriksa status tugas asinkron berdasarkan job_id. Untuk informasi lebih lanjut, lihat Mengirimkan tugas impor secara asinkron.

Apa yang harus dilakukan selanjutnya

Setelah impor selesai, masuk ke database tujuan adb_demo di kluster AnalyticDB for MySQL Anda. Jalankan pernyataan berikut untuk memverifikasi bahwa data telah diimpor dari tabel sumber ke dalam tabel tujuan adb_hdfs_import_test:

SELECT * FROM adb_hdfs_import_test LIMIT 100;

Buat tabel eksternal HDFS

  • Buat tabel eksternal untuk file CSV

    Pernyataannya adalah sebagai berikut:

    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"
    }';

    Parameter

    Diperlukan

    Deskripsi

    ENGINE='HDFS'

    Diperlukan

    Mesin penyimpanan untuk tabel eksternal. Contoh ini menggunakan HDFS.

    TABLE_PROPERTIES

    Metode yang digunakan oleh AnalyticDB for MySQL untuk mengakses data HDFS.

    format

    Format file data. Untuk membuat tabel eksternal untuk file CSV, atur parameter ini ke csv.

    delimiter

    Pemisah kolom untuk file data CSV. Contoh ini menggunakan koma (,).

    hdfs_url

    Alamat absolut file atau folder data tujuan dalam kluster HDFS. Alamat harus dimulai dengan hdfs://.

    Contoh: hdfs://172.17.***.***:9000/adb/hdfs_import_test_csv_data/hdfs_import_test_data.csv

    partition_column

    Opsional

    Kolom kunci partisi dari tabel eksternal. Pisahkan beberapa kolom dengan koma (,). Untuk informasi tentang cara mendefinisikan kolom kunci partisi, lihat Buat tabel eksternal HDFS terpartisi.

    compress_type

    Tipe kompresi file data. File CSV hanya mendukung tipe kompresi Gzip.

    skip_header_line_count

    Jumlah baris header yang dilewati di awal file selama impor data. Baris pertama file CSV adalah header tabel. Jika Anda mengatur parameter ini ke 1, baris pertama akan dilewati secara otomatis selama impor data.

    Nilai defaultnya adalah 0, yang berarti tidak ada baris yang dilewati.

    hdfs_ha_host_port

    Jika fitur High Availability (HA) dikonfigurasikan untuk kluster HDFS, konfigurasikan parameter hdfs_ha_host_port saat Anda membuat tabel eksternal. Formatnya adalah ip1:port1,ip2:port2. Alamat IP dan port adalah untuk instance namenode utama dan sekunder.

    Contoh: 192.168.xx.xx:8020,192.168.xx.xx:8021

  • Buat tabel eksternal untuk file Parquet atau ORC

    Pernyataan berikut menunjukkan cara membuat tabel eksternal untuk file 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/"
    }';

    Parameter

    Diperlukan

    Deskripsi

    ENGINE='HDFS'

    Diperlukan

    Mesin penyimpanan untuk tabel eksternal. Contoh ini menggunakan HDFS.

    TABLE_PROPERTIES

    Metode yang digunakan oleh AnalyticDB for MySQL untuk mengakses data HDFS.

    format

    Format file data.

    • Untuk membuat tabel eksternal untuk file Parquet, atur parameter ini ke parquet.

    • Untuk membuat tabel eksternal untuk file ORC, atur parameter ini ke orc.

    hdfs_url

    Alamat absolut file atau folder data tujuan dalam kluster HDFS. Alamat harus dimulai dengan hdfs://.

    partition_column

    Opsional

    Kolom kunci partisi dari tabel. Pisahkan beberapa kolom dengan koma (,). Untuk informasi tentang cara mendefinisikan kolom kunci partisi, lihat Buat tabel eksternal HDFS terpartisi.

    hdfs_ha_host_port

    Jika fitur HA dikonfigurasikan untuk kluster HDFS, konfigurasikan parameter hdfs_ha_host_port saat Anda membuat tabel eksternal. Formatnya adalah ip1:port1,ip2:port2. Alamat IP dan port adalah untuk instance namenode utama dan sekunder.

    Contoh: 192.168.xx.xx:8020,192.168.xx.xx:8021

    Catatan
    • Nama kolom dalam pernyataan `CREATE TABLE` untuk tabel eksternal harus identik dengan nama kolom dalam file Parquet atau ORC tetapi tidak peka huruf besar-kecil. Urutan kolom juga harus sama.

    • Saat Anda membuat tabel eksternal, Anda dapat memilih hanya beberapa kolom dari file Parquet atau ORC untuk menjadi kolom dalam tabel eksternal. Kolom yang tidak dipilih tidak akan diimpor.

    • Jika pernyataan `CREATE TABLE` untuk tabel eksternal mencakup kolom yang tidak ada dalam file Parquet atau ORC, kueri untuk kolom tersebut mengembalikan NULL.

    Pemetaan tipe data antara file Parquet dan AnalyticDB for MySQL

    Tipe data primitif Parquet

    Parquet logicalType

    Tipe data dalam AnalyticDB for MySQL

    BOOLEAN

    Tidak ada

    BOOLEAN

    INT32

    INT_8

    TINYINT

    INT32

    INT_16

    SMALLINT

    INT32

    Tidak ada

    INT atau INTEGER

    INT64

    Tidak ada

    BIGINT

    FLOAT

    Tidak ada

    FLOAT

    DOUBLE

    Tidak ada

    DOUBLE

    • FIXED_LEN_BYTE_ARRAY

    • BINARY

    • INT64

    • INT32

    DECIMAL

    DECIMAL

    BINARY

    UTF-8

    • VARCHAR

    • STRING

    • JSON (jika kolom Parquet diketahui dalam format JSON)

    INT32

    DATE

    DATE

    INT64

    TIMESTAMP_MILLIS

    TIMESTAMP atau DATETIME

    INT96

    Tidak ada

    TIMESTAMP atau DATETIME

    Penting

    Tabel eksternal untuk file Parquet tidak mendukung tipe STRUCT. Jika Anda menggunakan tipe ini, pembuatan tabel gagal.

    Pemetaan tipe data antara file ORC dan AnalyticDB for MySQL

    Tipe data dalam file ORC

    Tipe data dalam AnalyticDB for MySQL

    BOOLEAN

    BOOLEAN

    BYTE

    TINYINT

    SHORT

    SMALLINT

    INT

    INT atau INTEGER

    LONG

    BIGINT

    DECIMAL

    DECIMAL

    FLOAT

    FLOAT

    DOUBLE

    DOUBLE

    • BINARY

    • STRING

    • VARCHAR

    • VARCHAR

    • STRING

    • JSON (jika kolom ORC diketahui dalam format JSON)

    TIMESTAMP

    TIMESTAMP atau DATETIME

    DATE

    DATE

    Penting

    Tabel eksternal untuk file ORC tidak mendukung tipe kompleks seperti LIST, STRUCT, atau UNION. Jika Anda menggunakan tipe-tipe ini, pembuatan tabel gagal. Anda dapat membuat tabel eksternal untuk file ORC jika kolom menggunakan tipe MAP, tetapi kueri pada tabel tersebut akan gagal.

Buat tabel eksternal HDFS terpartisi

HDFS mendukung pemartisian data dalam format file Parquet, CSV, dan ORC. Data terpartisi membentuk direktori hierarkis pada HDFS. Dalam contoh berikut, p1 adalah partisi level-1, p2 adalah partisi level-2, dan p3 adalah partisi level-3:

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

Pernyataan berikut menunjukkan cara membuat tabel eksternal dengan kolom yang ditentukan untuk file 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",  //Untuk membuat tabel eksternal untuk file CSV atau ORC, ubah nilai format menjadi csv atau orc.
  "partition_column":"p1, p2, p3"  //Untuk data HDFS terpartisi, jika Anda ingin menanyakan data berdasarkan partisi, Anda harus menentukan parameter partition_column dalam pernyataan CREATE EXTERNAL TABLE saat Anda mengimpor data ke AnalyticDB for MySQL.
}';
Catatan
  • Parameter partition_column dalam TABLE_PROPERTIES menentukan kolom kunci partisi, seperti p1, p2, dan p3. Kolom kunci partisi harus dideklarasikan dalam parameter partition_column dalam urutan dari partisi level-1 hingga level-3.

  • Definisi kolom harus mencakup kolom kunci partisi, seperti p1, p2, dan p3, serta tipe datanya. Kolom kunci partisi harus ditempatkan di akhir definisi kolom.

  • Urutan kolom kunci partisi dalam definisi kolom harus sesuai dengan urutan dalam parameter partition_column.

  • Kolom kunci partisi mendukung tipe data berikut: BOOLEAN, TINYINT, SMALLINT, INT, INTEGER, BIGINT, FLOAT, DOUBLE, DECIMAL, VARCHAR, STRING, DATE, dan TIMESTAMP.

  • Saat Anda menanyakan data, kolom kunci partisi ditampilkan dan digunakan dengan cara yang sama seperti kolom data lainnya.

  • Jika Anda tidak menentukan format, format defaultnya adalah CSV.

  • Untuk informasi lebih lanjut tentang parameter lainnya, lihat Deskripsi parameter.