All Products
Search
Document Center

AnalyticDB:Gunakan tabel eksternal untuk mengimpor data HDFS

Last Updated:Mar 29, 2026

Tabel eksternal di AnalyticDB for MySQL berfungsi sebagai jembatan ke Hadoop Distributed File System (HDFS). Buat tabel eksternal yang memetakan file HDFS Anda, lalu jalankan pernyataan INSERT SELECT untuk memuat data ke dalam tabel native AnalyticDB for MySQL.

Prasyarat

Sebelum memulai, pastikan hal-hal berikut:

Kebutuhan kluster:

  • Kluster AnalyticDB for MySQL Anda menjalankan versi kernel 3.1.4 atau yang lebih baru. Untuk memeriksa dan memperbarui versinya, masuk ke Konsol AnalyticDB for MySQL, lalu buka bagian Configuration Information pada halaman Cluster Information. Untuk petunjuk selengkapnya, lihat Memperbarui versi minor kluster.

  • Kluster Anda merupakan kluster Edisi Data Warehouse yang berjalan dalam mode elastis. Mode elastis diperlukan untuk akses Elastic Network Interface (ENI).

Kebutuhan HDFS:

  • File data HDFS Anda berformat CSV, Parquet, atau ORC.

  • Kluster HDFS Anda sedang berjalan dan data yang akan diimpor tersedia di direktori HDFS. Topik ini menggunakan hdfs_import_test_data.csv sebagai contoh.

  • Port layanan berikut terbuka di kluster HDFS untuk AnalyticDB for MySQL:

    • NameNode: Mengelola metadata sistem file. Port default: 8020, dikonfigurasi melalui fs.defaultFS. Lihat core-default.xml.

    • DataNode: Menangani operasi baca dan tulis data. Port default: 50010, dikonfigurasi melalui dfs.datanode.address. Lihat hdfs-default.xml.

Network configuration:

Aktifkan akses ENI pada kluster Anda sebelum mengimpor data.

  1. Login ke Konsol AnalyticDB for MySQL.

  2. Pada halaman Cluster Information, buka bagian Network Information.

  3. Nyalakan sakelar Elastic Network Interface (ENI).

Penting

Mengaktifkan atau menonaktifkan ENI akan mengganggu koneksi database selama sekitar 2 menit. Operasi baca dan tulis tidak tersedia selama periode tersebut. Rencanakan perubahan ini selama jendela pemeliharaan.

Impor data HDFS

Langkah 1: Buat database tujuan

CREATE DATABASE IF NOT EXISTS adb_demo;

Langkah 2: Buat tabel eksternal HDFS

Dalam database adb_demo, buat tabel eksternal yang memetakan data HDFS Anda. Pilih tab yang sesuai dengan format file Anda.

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: Gunakan sintaks yang sama seperti Parquet, tetapi atur "format":"orc".

Untuk semua parameter yang tersedia dalam TABLE_PROPERTIES, lihat Parameter tabel eksternal.

Langkah 3: Buat tabel tujuan

Buat tabel native AnalyticDB for MySQL untuk menerima data yang diimpor.

Tabel standar:

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

Tabel terpartisi — sertakan kolom data dan kolom kunci partisi. Kolom kunci partisi harus ditempatkan di akhir daftar kolom:

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

Langkah 4: Impor data

Pilih salah satu metode berikut. Sintaksnya sama baik untuk tabel tujuan standar maupun terpartisi.

MetodePerintahKapan digunakan
INSERT OVERWRITE (disarankan)INSERT OVERWRITE <dest_table> SELECT * FROM <external_table>Dataset besar. Mendukung impor batch dengan throughput tinggi. Data hanya terlihat setelah impor berhasil; dikembalikan jika gagal.
INSERT INTOINSERT INTO <dest_table> SELECT * FROM <external_table>Dataset kecil. Baris yang dimasukkan langsung tersedia untuk kueri.
Tugas asinkronSUBMIT JOB INSERT OVERWRITE <dest_table> SELECT * FROM <external_table>Impor berdurasi panjang. Mengembalikan job_id segera sehingga Anda dapat memantau progres.

Contoh — INSERT OVERWRITE:

INSERT OVERWRITE adb_hdfs_import_test
SELECT * FROM hdfs_import_test_external_table;

Contoh — tugas asinkron:

SUBMIT JOB INSERT OVERWRITE adb_hdfs_import_test
SELECT * FROM hdfs_import_test_external_table;

Perintah tersebut mengembalikan job_id:

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

Gunakan job_id untuk memeriksa status impor. Untuk detailnya, lihat Kirim tugas impor secara asinkron.

Verifikasi impor

Setelah impor selesai, jalankan kueri berikut terhadap adb_demo untuk memastikan data telah dimuat dengan benar:

SELECT * FROM adb_hdfs_import_test LIMIT 100;

Buat tabel eksternal HDFS terpartisi

Gunakan tabel eksternal terpartisi ketika data HDFS Anda diorganisasikan dalam struktur direktori hierarkis. HDFS mendukung data terpartisi dalam format Parquet, CSV, dan ORC. Partisi membentuk hierarki direktori seperti berikut:

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 membuat tabel eksternal untuk dataset Parquet terpartisi ini:

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

Untuk menggunakan data CSV atau ORC, ubah "format" menjadi "csv" atau "orc". Jika format dihilangkan, CSV digunakan secara default.

Aturan untuk tabel eksternal terpartisi:

  • Properti partition_column mencantumkan kolom kunci partisi sesuai urutan kemunculannya dalam hierarki direktori. Urutannya harus persis sama.

  • Definisikan kolom kunci partisi dalam pernyataan CREATE TABLE dan letakkan di akhir daftar kolom, setelah semua kolom data.

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

  • Kolom kunci partisi berperilaku seperti kolom biasa dalam kueri — Anda dapat melakukan SELECT dan filter berdasarkan kolom tersebut.

  • Untuk parameter TABLE_PROPERTIES lainnya, lihat tabel parameter CSV atau tabel parameter Parquet/ORC.

Parameter tabel eksternal

Parameter CSV

ParameterWajibDeskripsi
ENGINE='HDFS'YaMenetapkan mesin penyimpanan ke HDFS.
TABLE_PROPERTIESYaObjek JSON yang berisi pengaturan koneksi dan format HDFS.
formatTidakFormat file. Atur ke csv. Jika dihilangkan, CSV digunakan secara default.
delimiterTidakKarakter pembatas kolom. Default: ,.
hdfs_urlYaPath absolut ke file atau direktori HDFS. Harus diawali dengan hdfs://. Contoh: hdfs://172.17.*.*:9000/adb/data/file.csv
partition_columnTidakDaftar kolom kunci partisi yang dipisahkan koma. Diperlukan untuk data terpartisi.
compress_typeTidakFormat kompresi. CSV hanya mendukung Gzip.
skip_header_line_countTidakJumlah baris header yang dilewati. Atur ke 1 untuk melewati baris header kolom. Default: 0.
hdfs_ha_host_portTidakAlamat IP dan port NameNode untuk kluster high availability (HA). Format: ip1:port1,ip2:port2. Contoh: 192.168.xx.xx:8020,192.168.xx.xx:8021

Parameter Parquet dan ORC

ParameterWajibDeskripsi
ENGINE='HDFS'YaMenetapkan mesin penyimpanan ke HDFS.
TABLE_PROPERTIESYaObjek JSON yang berisi pengaturan koneksi dan format HDFS.
formatYaFormat file. Atur ke parquet atau orc.
hdfs_urlYaPath absolut ke file atau direktori HDFS. Harus diawali dengan hdfs://.
partition_columnTidakDaftar kolom kunci partisi yang dipisahkan koma. Diperlukan untuk data terpartisi.
hdfs_ha_host_portTidakAlamat IP dan port NameNode untuk kluster HA. Format: ip1:port1,ip2:port2.

Aturan pemetaan kolom untuk file Parquet dan ORC:

  • Nama kolom dalam pernyataan CREATE TABLE harus sesuai dengan nama kolom dalam file (tidak peka huruf besar/kecil). Urutan kolom juga harus sesuai.

  • Anda dapat menyertakan hanya sebagian kolom dari file. Kolom yang tidak disertakan tidak akan diimpor.

  • Jika pernyataan CREATE TABLE mereferensikan kolom yang tidak ada dalam file, kueri terhadap kolom tersebut akan mengembalikan NULL.

Batasan

  • Tabel eksternal CSV hanya mendukung kompresi Gzip.

  • Tabel eksternal Parquet tidak dapat menggunakan kolom bertipe STRUCT.

  • Tabel eksternal ORC tidak dapat menggunakan tipe LIST, STRUCT, atau UNION. Tipe MAP dapat digunakan saat pembuatan tabel tetapi tidak dapat dikueri.

Pemetaan tipe data

Parquet ke AnalyticDB for MySQL

Tipe dasar di ParquetTipe logis di ParquetTipe data di AnalyticDB for MySQL
BOOLEANN/ABOOLEAN
INT32INT_8TINYINT
INT32INT_16SMALLINT
INT32N/AINT atau INTEGER
INT64N/ABIGINT
FLOATN/AFLOAT
DOUBLEN/ADOUBLE
FIXED_LEN_BYTE_ARRAY, BINARY, INT64, atau INT32DECIMALDECIMAL
BINARYUTF-8VARCHAR, STRING, atau JSON (tersedia jika objek Parquet berisi kolom bertipe JSON)
INT32DATEDATE
INT64TIMESTAMP_MILLISTIMESTAMP atau DATETIME
INT96N/ATIMESTAMP atau DATETIME

ORC ke AnalyticDB for MySQL

Tipe data di ORCTipe data di AnalyticDB for MySQL
BOOLEANBOOLEAN
BYTETINYINT
SHORTSMALLINT
INTINT atau INTEGER
LONGBIGINT
DECIMALDECIMAL
FLOATFLOAT
DOUBLEDOUBLE
BINARY, STRING, atau VARCHARVARCHAR, STRING, atau JSON (tersedia jika objek ORC berisi kolom bertipe JSON)
TIMESTAMPTIMESTAMP atau DATETIME
DATEDATE

Langkah berikutnya