AnalyticDB for MySQL mendukung impor dan ekspor data menggunakan tabel eksternal. Topik ini menjelaskan cara melakukan kueri data dari Hadoop Distributed File System (HDFS) dan mengimpor data ke AnalyticDB for MySQL dari sumber seperti HDFS, AWS S3, Azure Blob Storage, atau Google Cloud Storage.
Prasyarat
-
Kluster AnalyticDB for MySQL Anda harus menjalankan kernel versi 3.1.4 atau yang lebih baru. Untuk membuat tabel eksternal untuk data di penyimpanan cloud eksternal, seperti AWS S3, Azure Blob Storage, atau Google Cloud Storage, versi kernel harus 3.2.6 atau yang lebih baru.
CatatanUntuk melihat dan memperbarui versi minor, buka bagian Configuration Information pada halaman Cluster Information di Konsol AnalyticDB for MySQL.
-
File data HDFS harus dalam format CSV, Parquet, atau ORC.
-
Kluster HDFS tersedia, dan data yang akan diimpor disimpan dalam file HDFS. Topik ini menggunakan file
hdfs_import_test_data.csvsebagai contoh. -
Port akses layanan berikut harus dikonfigurasi di kluster HDFS untuk kluster AnalyticDB for MySQL Anda:
-
namenode: Membaca dan menulis metadata sistem file. Nomor port dikonfigurasi dalam parameterfs.defaultFS. Port default adalah 8020.Untuk detail konfigurasi, lihat core-default.xml.
-
datanode: Membaca dan menulis data. Nomor port dikonfigurasi dalam parameterdfs.datanode.address. Port default adalah 50010.Untuk detail konfigurasi, lihat hdfs-default.xml.
-
-
Antarmuka jaringan elastis (ENI) harus diaktifkan untuk kluster AnalyticDB for MySQL Anda yang berjalan di Edisi Data Warehouse dalam mode elastis.
Penting-
Masuk ke Konsol AnalyticDB for MySQL. Pada halaman Cluster Information, di bagian Network Information, aktifkan sakelar jaringan ENI.
-
Mengaktifkan atau menonaktifkan jaringan ENI mengganggu koneksi database selama sekitar 2 menit, sehingga operasi baca dan tulis tidak tersedia selama periode tersebut. Evaluasi secara cermat dampak potensial sebelum mengaktifkan atau menonaktifkan jaringan ENI.
-
Prosedur
-
(Opsional) Konfigurasi akses jaringan publik.
Jika Anda perlu menggunakan tabel eksternal untuk terhubung ke layanan penyimpanan objek dari penyedia cloud lain, seperti AWS S3, Azure Blob Storage, atau Google Cloud Storage, pastikan kluster AnalyticDB for MySQL Anda dapat mengakses jaringan publik.
-
Konfigurasikan gerbang NAT dan Elastic IP Address (EIP) untuk VPC kluster AnalyticDB for MySQL Anda.
-
Gerbang NAT harus berada di wilayah yang sama dengan instans AnalyticDB for MySQL Anda.
-
Kami merekomendasikan agar Anda membuat entri SNAT di tingkat vSwitch. Anda dapat menentukan vSwitch apa pun.
-
-
Aktifkan akses antarmuka jaringan elastis (ENI) untuk kluster AnalyticDB for MySQL Anda.
Penting-
Login ke Konsol AnalyticDB for MySQL. Pada halaman Cluster Information, di bagian Network Information, aktifkan sakelar ENI.
-
Mengaktifkan atau menonaktifkan ENI mengganggu koneksi database selama sekitar 2 menit. Selama periode ini, operasi baca dan tulis tidak tersedia. Evaluasi secara cermat dampak potensial sebelum mengaktifkan atau menonaktifkan ENI.
-
-
-
Buat database tujuan. Dalam contoh ini, database tujuan di kluster AnalyticDB for MySQL diberi nama
adb_demo.CREATE DATABASE IF NOT EXISTS adb_demo; -
Jalankan pernyataan
CREATE TABLEdi database tujuanadb_demountuk membuat tabel eksternal dalam format CSV, Parquet, atau ORC.-
Jika Anda menggunakan sumber data HDFS:
-
Untuk terhubung ke layanan penyimpanan objek dari penyedia cloud lain, seperti AWS S3, Azure Blob Storage, atau Google Cloud Storage, buat tabel eksternal untuk penyimpanan cloud.
-
-
Buat tabel tujuan.
Gunakan salah satu pernyataan berikut untuk membuat tabel tujuan di database
adb_demoguna 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 sebagai berikut:CREATE TABLE IF NOT EXISTS adb_hdfs_import_test ( uid string, other string ) DISTRIBUTED BY HASH(uid); -
Saat membuat tabel tujuan untuk tabel eksternal terpartisi, Anda harus mendefinisikan kolom standar, seperti
uiddanother, serta kolom kunci partisi, sepertip1,p2, danp3, dalam pernyataan tersebut. Dalam contoh ini, tabel tujuan diberi namaadb_hdfs_import_parquet_partition. Sintaksnya 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);
-
-
Impor data dari HDFS ke kluster tujuan AnalyticDB for MySQL.
Pilih metode impor berdasarkan kebutuhan bisnis Anda. Sintaks impor sama untuk tabel terpartisi maupun tabel standar. Contoh berikut menggunakan tabel standar:
-
(Direkomendasikan) Metode 1: Gunakan
INSERT OVERWRITEuntuk mengimpor data. Metode ini mendukung impor batch dan memberikan performa tinggi. Data menjadi terlihat setelah impor berhasil. Jika impor gagal, data akan dikembalikan (rollback). Contoh kode sebagai berikut:INSERT OVERWRITE adb_hdfs_import_test SELECT * FROM hdfs_import_test_external_table; -
Metode 2: Gunakan
INSERT INTOuntuk mengimpor data. Anda dapat melakukan kueri data yang dimasukkan secara real time. Gunakan metode ini untuk jumlah data yang kecil. Contoh kode sebagai berikut:INSERT INTO adb_hdfs_import_test SELECT * FROM hdfs_import_test_external_table; -
Metode 3: Jalankan tugas asinkron untuk mengimpor data. Contoh kode sebagai berikut:
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 menggunakan
job_idyang dikembalikan. Untuk informasi selengkapnya, lihat Kirimkan tugas impor secara asinkron.
-
Langkah selanjutnya
Setelah impor selesai, login ke database tujuan, adb_demo, di AnalyticDB for MySQL, lalu jalankan pernyataan berikut untuk memverifikasi bahwa data dari tabel sumber telah diimpor ke tabel tujuan adb_hdfs_import_test:
SELECT * FROM adb_hdfs_import_test LIMIT 100;
Buat tabel eksternal HDFS
-
Buat tabel eksternal untuk file CSV
Gunakan pernyataan 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
Wajib
Deskripsi
ENGINE='HDFS'Ya
Menentukan mesin penyimpanan. Harus diatur ke HDFS untuk tabel eksternal HDFS.
TABLE_PROPERTIESMenentukan properti untuk AnalyticDB for MySQL agar dapat mengakses data HDFS.
formatFormat file data. Diatur ke
csvuntuk file CSV.delimiterPemisah kolom dalam file data CSV. Contoh ini menggunakan koma (,).
hdfs_urlAlamat absolut file atau folder data target di kluster HDFS. Alamat harus diawali dengan
hdfs://.Contoh:
hdfs://172.17.***.***:9000/adb/hdfs_import_test_csv_data/hdfs_import_test_data.csvpartition_columnTidak
Kolom kunci partisi dari tabel eksternal. Pisahkan beberapa kolom dengan koma (,). Untuk informasi selengkapnya, lihat Buat tabel eksternal HDFS terpartisi.
compress_typeJenis kompresi file data. Untuk file CSV, hanya jenis Gzip yang didukung.
skip_header_line_countJumlah baris header yang dilewati dari awal file. Untuk melewati satu baris header tabel, atur parameter ini ke 1.
Nilai default: 0. Artinya tidak ada baris yang dilewati.
hdfs_ha_host_portJika Ketersediaan tinggi (HA) dikonfigurasi untuk kluster HDFS, Anda harus menentukan parameter
hdfs_ha_host_portsaat membuat tabel eksternal. Formatnya adalahip1:port1,ip2:port2. Alamat IP dan port sesuai dengan instansnamenodeaktif dan cadangan.Contoh:
192.168.xx.xx:8020,192.168.xx.xx:8021 -
Buat tabel eksternal HDFS untuk file Parquet atau ORC
Contoh berikut menunjukkan cara membuat tabel eksternal HDFS 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
Wajib
Deskripsi
ENGINE='HDFS'Ya
Menentukan mesin penyimpanan. Harus diatur ke HDFS untuk tabel eksternal HDFS.
TABLE_PROPERTIESMenentukan properti untuk AnalyticDB for MySQL agar dapat mengakses data HDFS.
formatFormat 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_urlAlamat absolut file atau folder data target di kluster HDFS. Alamat harus diawali dengan
hdfs://.partition_columnTidak
Kolom kunci partisi dari tabel eksternal. Pisahkan beberapa kolom dengan koma (,). Untuk informasi selengkapnya, lihat Buat tabel eksternal HDFS terpartisi.
hdfs_ha_host_portJika Ketersediaan tinggi (HA) dikonfigurasi untuk kluster HDFS, Anda harus menentukan parameter
hdfs_ha_host_portsaat membuat tabel eksternal. Formatnya adalahip1:port1,ip2:port2. Alamat IP dan port sesuai dengan instansnamenodeaktif dan cadangan.Contoh:
192.168.xx.xx:8020,192.168.xx.xx:8021Catatan-
Nama kolom dan urutannya dalam pernyataan CREATE EXTERNAL TABLE harus sesuai dengan yang ada di file sumber Parquet atau ORC. Nama kolom tidak peka huruf besar/kecil.
-
Anda dapat membuat tabel eksternal menggunakan subset kolom dari file sumber. Kolom yang tidak ditentukan dalam pernyataan CREATE EXTERNAL TABLE akan diabaikan.
-
Jika pernyataan CREATE EXTERNAL TABLE mencakup kolom yang tidak ada di file Parquet atau ORC, kueri pada kolom tersebut akan mengembalikan NULL.
Pemetaan tipe data antara file Parquet dan AnalyticDB for MySQL
Tipe data primitif Parquet
Parquet logicalType
Tipe data di AnalyticDB for MySQL
BOOLEAN
None
BOOLEAN
INT32
INT_8
TINYINT
INT32
INT_16
SMALLINT
INT32
None
INT atau INTEGER
INT64
None
BIGINT
FLOAT
None
FLOAT
DOUBLE
None
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
None
TIMESTAMP atau DATETIME
PentingTabel eksternal untuk file Parquet tidak mendukung tipe
STRUCT. Jika Anda menggunakan tipe ini, pembuatan tabel akan gagal.Pemetaan tipe data antara file ORC dan AnalyticDB for MySQL
Tipe data di file ORC
Tipe data di 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
PentingTabel eksternal untuk file ORC tidak mendukung tipe kompleks seperti
LIST,STRUCT, atauUNION. Jika Anda menggunakan tipe-tipe ini, pembuatan tabel akan gagal. Anda dapat membuat tabel eksternal untuk file ORC jika suatu kolom menggunakan tipeMAP, tetapi kueri pada tabel tersebut akan gagal. -
Buat tabel eksternal HDFS terpartisi
HDFS mendukung partisi data dalam format file Parquet, CSV, dan ORC. Data terpartisi membentuk direktori hierarkis di 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
├── p3=HANGZHOU
│ └── 000000_0
└── p3=SHENZHEN
└── 000000_0
Contoh berikut menunjukkan pernyataan CREATE TABLE untuk membuat tabel eksternal 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 melakukan kueri data HDFS terpartisi berdasarkan partisi, tentukan parameter partition_column dalam pernyataan CREATE TABLE saat mengimpor data ke AnalyticDB for MySQL.
}';
-
Parameter
partition_columndalamTABLE_PROPERTIESmenentukan kolom kunci partisi, seperti p1, p2, dan p3. Kolom kunci partisi harus dideklarasikan dalam parameterpartition_columnsesuai urutan dari partisi level-1 hingga level-3. -
Definisi kolom harus mencakup kolom kunci partisi, seperti p1, p2, dan p3, beserta 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, danTIMESTAMP. -
Saat Anda melakukan kueri data, kolom kunci partisi ditampilkan dan digunakan seperti kolom data lainnya.
-
Jika Anda tidak menentukan format, format default adalah CSV.
-
Untuk informasi selengkapnya tentang parameter lainnya, lihat Deskripsi parameter.
Buat tabel eksternal untuk penyimpanan cloud
AWS S3
Parameter
|
Parameter |
Deskripsi |
|
hdfs_url |
Direktori file S3, diawali dengan |
|
s3.access_key |
Kunci akses untuk S3. Untuk mengelola kunci akses, lihat Mengelola kunci akses untuk pengguna IAM. |
|
s3.secret_key |
Kunci akses rahasia untuk S3. |
|
s3.endpoint |
Titik akhir S3. |
Persyaratan izin
|
Skenario |
Izin minimum |
Kebijakan yang direkomendasikan |
|
Baca data dari tabel eksternal S3 |
|
Kami merekomendasikan menggunakan kebijakan AmazonS3ReadOnlyAccess:
|
|
Ekspor data ke tabel eksternal S3 |
|
Kami merekomendasikan menggunakan kebijakan AmazonS3FullAccess:
|
Contoh
-
Buat tabel eksternal tidak terpartisi
CREATE TABLE t1(c1 int, c2 int) ENGINE='hdfs' TABLE_PROPERTIES='{ "format" : "parquet", "hdfs_url" : "s3a://adbtest/t1", "s3.access_key":"AKIA****************45P", "s3.secret_key":"XH41************************l0q", "s3.endpoint":"s3.cn-north-1.amazonaws.com.cn" }' -
Buat tabel eksternal terpartisi
CREATE TABLE t1(c1 int, c2 int, p1 int) ENGINE='hdfs' TABLE_PROPERTIES='{ "partition_column":"p1", "format" : "parquet", "hdfs_url" : "s3a://adbtest/t1", "s3.access_key":"AKIAS************5P", "s3.secret_key":"XH41pLbBbFb**************xDl0q", "s3.endpoint":"s3.cn-north-1.amazonaws.com.cn" }'
Azure Blob Storage
Parameter
|
Parameter |
Wajib |
Deskripsi |
|
hdfs_url |
Ya |
Jalur ke direktori di Azure Blob Storage, dalam format |
|
azure.endpoint |
Ya |
Titik akhir Azure Blob Storage. |
|
azure.accesskey |
Wajib untuk autentikasi Shared Key. |
Kunci akses Azure. Untuk melihat kunci akses, lihat Mengelola kunci akses akun penyimpanan. |
|
azure.sas.token |
Wajib untuk autentikasi SAS. |
Token untuk autentikasi SAS. |
Persyaratan izin
|
Skenario |
Izin minimum |
|
Impor data dari tabel eksternal Azure |
|
|
Ekspor data ke tabel eksternal Azure |
|
Di panel navigasi untuk akun penyimpanan, klik Settings > Access policy. Edit kebijakan di bagian Stored access policies.
Contoh
-
Gunakan autentikasi Shared Key.
CREATE TABLE t2(c1 int, c2 int, p1 int) ENGINE='hdfs' TABLE_PROPERTIES='{ "partition_column":"p1", "format" : "parquet", "hdfs_url" : "abfss://{container}@{account}.{domain}/test", "azure.accesskey":"qss33o/fQ2lCCQ+d7******************************8fxq+7dbdzuPuZji+AStCERlsg==", "azure.endpoint":"{account}.{domain}" }' -
Gunakan autentikasi SAS.
CREATE TABLE t2(c1 int, c2 int, p1 int) ENGINE='hdfs' TABLE_PROPERTIES='{ "partition_column":"p1", "format" : "parquet", "hdfs_url" : "abfss://{container}@{account}.{domain}/tb1", "azure.sas.token":"sv=2024-11-04&ss=bfqt&srt=sco&sp=rwdlacupx&se=2026-04-02T20:01:51Z&st=2025-04-02T12:01:51Z&spr=https,http&sig=r6a3************p7rM%3D", "azure.endpoint":"{account}.{domain}" }'
Google Cloud Storage
Parameter
|
Parameter |
Deskripsi |
|
hdfs_url |
Jalur ke data di Google Cloud Storage, yang harus diawali dengan |
|
gcs.project_id |
|
|
gcs.client_email |
|
|
gcs.token_uri |
|
|
gcs.private_key_id |
|
|
gcs.private_key |
|
Nilai untuk parameter-parameter ini ditemukan dalam file kunci JSON yang dihasilkan saat Anda membuat akun layanan. Untuk instruksi, lihat Buat akun layanan.
Persyaratan izin
|
Skenario |
Izin minimum |
|
Impor data dari tabel eksternal Google Cloud Storage |
Storage Legacy Bucket Reader |
|
Ekspor data ke tabel eksternal Google Cloud Storage |
Storage Legacy Object Owner |
Untuk informasi selengkapnya tentang kontrol akses untuk bucket GCS, lihat Ikhtisar kontrol akses.
Contoh
CREATE TABLE t2(c1 int, c2 int, p1 int)
ENGINE='hdfs'
TABLE_PROPERTIES='{
"partition_column":"p1",
"format" : "parquet",
"hdfs_url" : "gs://adbtest2/tbls/table1",
"gcs.project_id":"test-project",
"gcs.client_email":"adbtest@test-project.iam.gserviceaccount.com",
"gcs.token_uri":"https://oauth2.googleapis.cn/token",
"gcs.private_key_id":"xxxx",
"gcs.private_key":"-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFA****-----END PRIVATE KEY-----\n"
}'