All Products
Search
Document Center

AnalyticDB:Impor data OSS menggunakan tabel eksternal

Last Updated:May 09, 2026

AnalyticDB for MySQL mendukung pengimporan data eksternal menggunakan tabel eksternal. Topik ini menjelaskan cara menggunakannya untuk mengimpor data dari OSS ke kluster AnalyticDB for MySQL.

Prasyarat

  • Kluster AnalyticDB for MySQL dan bucket OSS berada di wilayah yang sama. Untuk informasi selengkapnya, lihat Aktifkan OSS.

  • Anda telah mengunggah file data ke direktori OSS.

  • Akses antarmuka jaringan elastis (ENI) telah diaktifkan untuk kluster AnalyticDB for MySQL Edisi Data Warehouse.

    Penting
    • Masuk ke Konsol AnalyticDB for MySQL. Pada halaman Cluster Information, di bawah bagian Network Information, aktifkan sakelar jaringan ENI.

    • Mengaktifkan atau menonaktifkan jaringan ENI akan mengganggu konektivitas database selama sekitar 2 menit, sehingga operasi baca dan tulis tidak tersedia. Evaluasi dampaknya secara hati-hati sebelum mengaktifkan atau menonaktifkan jaringan ENI.

Persiapan data

Contoh ini mengunggah file data person.csv ke direktori testBucketName/adb/dt=2023-06-15 di OSS. File tersebut menggunakan line feed sebagai pemisah baris dan koma (,) sebagai pemisah kolom. File person.csv berisi data sampel berikut:

1,james,10,2023-06-15
2,bond,20,2023-06-15
3,jack,30,2023-06-15
4,lucy,40,2023-06-15       

Prosedur

Edisi Perusahaan, Edisi Dasar, dan Edisi Danau Data Terpadu

  1. Buka editor Pengembangan SQL.

    1. Masuk ke Konsol AnalyticDB for MySQL. Di pojok kiri atas konsol, pilih wilayah. Di panel navigasi sebelah kiri, klik Clusters. Temukan kluster yang ingin Anda kelola dan klik ID kluster tersebut.

    2. Di panel navigasi sebelah kiri, pilih Job Development > SQL Development.

  2. Impor data.

    Anda dapat mengimpor data menggunakan impor reguler (default) atau impor elastis. Dalam mode impor reguler, sistem membaca data sumber dari node komputasi dan membuat indeks pada node penyimpanan, sehingga mengonsumsi sumber daya komputasi dan penyimpanan. Metode impor elastis hanya didukung untuk kluster Edisi Perusahaan, Edisi Dasar, dan Edisi Danau Data Terpadu yang menjalankan kernel versi 3.1.10.0 atau lebih baru serta memiliki kelompok sumber daya jenis pekerjaan. Untuk informasi selengkapnya, lihat Metode impor data.

    Impor reguler

    1. Buat database eksternal.

      CREATE EXTERNAL DATABASE adb_external_db;
    2. Buat tabel eksternal. Gunakan pernyataan CREATE EXTERNAL TABLE untuk membuat tabel eksternal OSS di database eksternal adb_external_db. Topik ini menggunakan adb_external_db.person sebagai contoh.

      Catatan

      Tabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan file sumber OSS.

      Buat tabel eksternal OSS non-partisi

      CREATE EXTERNAL TABLE adb_external_db.person
      (
       id INT,
       name VARCHAR(1023),
       age INT,
       dt VARCHAR(1023)
      )
      ROW FORMAT DELIMITED FIELDS TERMINATED BY  ','
      STORED AS TEXTFILE
      LOCATION  'oss://testBucketName/adb/dt=2023-06-15/';

      Buat tabel eksternal OSS partisi

      Sebelum Anda dapat melakukan kueri pada tabel eksternal OSS partisi, Anda harus membuatnya dan menambahkan partisi yang diperlukan.

      1. Buat tabel eksternal OSS partisi.

        CREATE EXTERNAL TABLE adb_external_db.person
        (
         id INT,
         name VARCHAR(1023) ,
         age INT
        )
        PARTITIONED BY (dt STRING)
        ROW FORMAT DELIMITED FIELDS TERMINATED BY  ','
        STORED AS TEXTFILE
        LOCATION  'oss://testBucketName/adb/';
      2. Anda dapat menggunakan pernyataan ALTER TABLE ADD PARTITION untuk menambahkan partisi secara manual, atau menggunakan pernyataan MSCK REPAIR TABLE untuk menemukan dan menambahkan partisi secara otomatis.

        ALTER TABLE adb_external_db.person ADD PARTITION (dt='2023-06-15') LOCATION 'oss://testBucketName/adb/dt=2023-06-15/';
        Catatan

      Untuk informasi selengkapnya tentang sintaksis pembuatan tabel eksternal OSS, lihat CREATE EXTERNAL TABLE.

    3. Lakukan kueri data.

      Setelah membuat tabel eksternal, Anda dapat menjalankan pernyataan SELECT di AnalyticDB for MySQL untuk mengkueri data dari OSS.

      SELECT * FROM adb_external_db.person;

      Hasil berikut dikembalikan:

      +------+-------+------+-----------+
      | id   | name  | age  | dt        |
      +------+-------+------+-----------+
      |    1 | james |   10 |2023-06-15 |
      |    2 | bond  |   20 |2023-06-15 |
      |    3 | jack  |   30 |2023-06-15 |
      |    4 | lucy  |   40 |2023-06-15 |
      +------+-------+------+-----------+
    4. Buat database di AnalyticDB for MySQL. Jika database sudah ada, Anda dapat melewati langkah ini. Berikut adalah contoh pernyataan:

      CREATE DATABASE adb_demo; 
    5. Buat tabel di AnalyticDB for MySQL untuk menyimpan data OSS yang diimpor. Berikut adalah contoh pernyataan:

      Catatan

      Tabel internal harus sesuai dengan tabel eksternal dari langkah b dalam hal nama bidang, jumlah bidang, urutan bidang, dan tipe data.

      CREATE TABLE IF NOT EXISTS adb_demo.adb_import_test(
          id INT,
          name VARCHAR(1023),
          age INT,
          dt VARCHAR(1023)
      )
      DISTRIBUTED BY HASH(id);
    6. Impor data ke dalam tabel.

      • Metode 1: Gunakan pernyataan INSERT INTO. Jika terjadi duplikasi primary key, data baru akan diabaikan. Ini setara dengan INSERT IGNORE INTO. Untuk informasi selengkapnya, lihat INSERT INTO. Contoh:

        INSERT INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
      • Metode 2: Gunakan pernyataan INSERT OVERWRITE INTO untuk mengimpor data secara sinkron. Ini akan menimpa data yang sudah ada di tabel. Contoh:

        INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_external_db.person;
      • Metode 3: Gunakan pernyataan INSERT OVERWRITE INTO untuk mengimpor data secara asinkron. Untuk informasi selengkapnya, lihat penulisan asinkron. Contoh:

        SUBMIT JOB INSERT OVERWRITE adb_demo.adb_import_test SELECT * FROM adb_external_db.person;

    Impor elastis

    1. Buat database. Jika database sudah ada, lewati langkah ini. Berikut adalah contoh pernyataan:

      CREATE DATABASE adb_demo; 
    2. Buat tabel eksternal.

      Catatan
      • Tabel eksternal AnalyticDB for MySQL harus memiliki nama bidang, jumlah bidang, urutan bidang, dan tipe data yang sama dengan file sumber OSS.

      • Impor elastis hanya mendukung pembuatan tabel eksternal dengan pernyataan CREATE TABLE.

      CREATE TABLE oss_import_test_external_table
      (
        id INT(1023),
        name VARCHAR(1023),
        age INT,
        dt VARCHAR(1023)
      )
      ENGINE='OSS'
      TABLE_PROPERTIES='{
          "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
          "url":"oss://testBucketName/adb/dt=2023-06-15/person.csv",
          "accessid":"accesskey_id",
          "accesskey":"accesskey_secret",
          "delimiter":","
      }';
      Penting

      Saat membuat tabel eksternal, parameter TABLE_PROPERTIES yang didukung bervariasi berdasarkan format file (CSV, Parquet, atau ORC):

      • Format CSV: Hanya parameter endpoint, url, accessid, accesskey, format, delimiter, null_value, dan partition_column yang didukung.

      • Format Parquet: Hanya parameter endpoint, url, accessid, accesskey, format, dan partition_column yang didukung.

      • Format ORC: Hanya parameter endpoint, url, accessid, accesskey, format, dan partition_column yang didukung.

      Untuk informasi selengkapnya tentang parameter yang dapat Anda atur untuk tabel eksternal dan deskripsinya, lihat Tabel eksternal OSS non-partisi dan Tabel eksternal OSS partisi.

    3. Lakukan kueri data.

      Setelah tabel eksternal dibuat, Anda dapat menjalankan pernyataan SELECT di AnalyticDB for MySQL untuk mengkueri data dari OSS.

      SELECT * FROM oss_import_test_external_table;

      Hasil berikut dikembalikan:

      +------+-------+------+-----------+
      | id   | name  | age  | dt        |
      +------+-------+------+-----------+
      |    1 | james |   10 |2023-06-15 |
      |    2 | bond  |   20 |2023-06-15 |
      |    3 | jack  |   30 |2023-06-15 |
      |    4 | lucy  |   40 |2023-06-15 |
      +------+-------+------+-----------+
      4 rows in set (0.35 sec)
    4. Buat tabel di AnalyticDB for MySQL untuk menyimpan data OSS yang diimpor. Berikut adalah contoh pernyataan:

      Catatan

      Tabel internal harus sesuai dengan tabel eksternal dari langkah b dalam hal nama bidang, jumlah bidang, urutan bidang, dan tipe data.

      CREATE TABLE adb_import_test
      (
        id INT,
        name VARCHAR(1023),
        age INT,
        dt VARCHAR(1023)
      )
      DISTRIBUTED BY HASH(id);
    5. Impor data.

      Penting

      Impor elastis hanya mendukung pengimporan data menggunakan pernyataan INSERT OVERWRITE INTO.

      • Metode 1: Jalankan pernyataan INSERT OVERWRITE INTO untuk mengimpor data secara elastis, menimpa data yang sudah ada di tabel. Berikut adalah contoh pernyataan:

        /*+elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/
        INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.oss_import_test_external_table;
      • Metode 2: Jalankan pernyataan INSERT OVERWRITE INTO secara asinkron untuk mengimpor data secara elastis. Anda dapat menggunakan pernyataan SUBMIT JOB untuk mengirimkan tugas asinkron yang dijadwalkan di latar belakang.

        /*+elastic_load=true, elastic_load_configs=[adb.load.resource.group.name=resource_group]*/
        SUBMIT JOB INSERT OVERWRITE INTO adb_demo.adb_import_test SELECT * FROM adb_demo.oss_import_test_external_table;
        Penting

        Anda tidak dapat mengatur antrian prioritas saat mengirimkan tugas impor elastis secara asinkron.

        Hasil berikut dikembalikan:

        +---------------------------------------+
        | job_id                                |
        +---------------------------------------+
        | 202308151719510210170190**********    |

      Setelah Anda mengirimkan tugas asinkron menggunakan SUBMIT JOB, hasil yang dikembalikan hanya menunjukkan bahwa tugas berhasil dikirim. Anda dapat menggunakan job ID untuk menghentikan tugas asinkron atau memeriksa statusnya guna menentukan apakah tugas tersebut berhasil dieksekusi. Untuk informasi selengkapnya, lihat Kirimkan pekerjaan impor asinkron.

      Parameter hint:

      • elastic_load: menentukan apakah akan menggunakan impor elastis. Nilai yang valid: true dan false. Nilai default: false.

      • elastic_load_configs: parameter konfigurasi fitur impor elastis. Anda harus membungkus parameter dalam tanda kurung siku ([ ]) dan memisahkan beberapa parameter dengan tanda pipa vertikal (|). Tabel berikut menjelaskan parameter tersebut.

        Parameter

        Wajib

        Deskripsi

        adb.load.resource.group.name

        Ya

        Nama kelompok sumber daya pekerjaan yang menjalankan pekerjaan impor elastis.

        adb.load.job.max.acu

        Tidak

        Jumlah maksimum sumber daya untuk pekerjaan impor elastis. Satuan: unit komputasi AnalyticDB (ACU). Nilai minimum: 5 ACU. Nilai default: jumlah shard ditambah 1.

        Jalankan pernyataan berikut untuk mengkueri jumlah shard di kluster:

        SELECT count(1) FROM information_schema.kepler_meta_shards;

        spark.driver.resourceSpec

        Tidak

        Jenis sumber daya Spark driver. Nilai default: small. Untuk informasi tentang nilai yang valid, lihat kolom Type pada tabel "Parameter konfigurasi aplikasi Spark" di topik parameter konfigurasi Conf.

        spark.executor.resourceSpec

        Tidak

        Jenis sumber daya Spark executor. Nilai default: large. Untuk informasi tentang nilai yang valid, lihat kolom Type pada tabel "Parameter konfigurasi aplikasi Spark" di topik parameter konfigurasi Conf.

        spark.adb.executorDiskSize

        Tidak

        Kapasitas disk Spark executor. Nilai yang valid: (0,100]. Satuan: GiB. Nilai default: 10 GiB. Untuk informasi selengkapnya, lihat bagian "Tentukan sumber daya driver dan executor" di topik parameter konfigurasi Conf.

    6. (Opsional) Periksa apakah tugas impor yang dikirimkan merupakan tugas impor elastis.

      SELECT job_name, (job_type = 3) AS is_elastic_load FROM INFORMATION_SCHEMA.kepler_meta_async_jobs where job_name = "2023081818010602101701907303151******";

      Hasil berikut dikembalikan:

      +---------------------------------------+------------------+
      | job_name                              | is_elastic_load  |
      +---------------------------------------+------------------+
      | 20230815171951021017019072*********** |       1          |
      +---------------------------------------+------------------+

      Jika nilai is_elastic_load adalah 1, tugas impor yang dikirimkan merupakan tugas impor elastis. Jika nilainya 0, tugas tersebut merupakan tugas impor reguler.

Edisi data warehouse

  1. Hubungkan ke kluster dan buat database.

    CREATE DATABASE adb_demo;
  2. Buat tabel eksternal. Gunakan sintaksis CREATE TABLE untuk membuat tabel eksternal OSS dalam format CSV, Parquet, atau ORC. Untuk informasi selengkapnya tentang sintaksis, lihat Sintaksis tabel eksternal OSS.

    Topik ini menggunakan tabel eksternal non-partisi dalam format CSV sebagai contoh.

    CREATE TABLE IF NOT EXISTS oss_import_test_external_table
    (
        id INT,
        name VARCHAR(1023),
        age INT,
        dt VARCHAR(1023) 
    )
    ENGINE='OSS'
    TABLE_PROPERTIES='{
        "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
        "url":"oss://testBucketname/adb/dt=2023-06-15/person.csv",
        "accessid":"accesskey_id",
        "accesskey":"accesskey_secret",
        "delimiter":",",
        "skip_header_line_count":0,
        "charset":"utf-8"
    }'; 
  3. Lakukan kueri data dari tabel eksternal oss_import_test_external_table.

    Catatan

    Untuk file data CSV, Parquet, atau ORC, melakukan kueri pada tabel eksternal berukuran besar dapat menyebabkan overhead performa yang signifikan. Untuk meningkatkan efisiensi kueri, kami menyarankan agar Anda mengimpor data dari tabel eksternal OSS ke AnalyticDB for MySQL sebelum menjalankan kueri, seperti yang dijelaskan pada Langkah 4 dan 5.

    SELECT * FROM oss_import_test_external_table;
  4. Buat tabel di AnalyticDB for MySQL untuk menyimpan data yang diimpor dari tabel eksternal OSS.

    CREATE TABLE IF NOT EXISTS adb_oss_import_test
    (
       id INT,
       name VARCHAR(1023),
       age INT,
       dt VARCHAR(1023) 
    )
    DISTRIBUTED BY HASH(id);
  5. Jalankan pernyataan INSERT untuk mengimpor data dari tabel eksternal OSS ke AnalyticDB for MySQL.

    Penting

    Secara default, operasi impor data yang menggunakan INSERT INTO atau INSERT OVERWRITE SELECT dijalankan secara sinkron. Untuk dataset berukuran besar, seperti ratusan gigabyte, klien harus mempertahankan koneksi persisten ke server AnalyticDB for MySQL dalam waktu lama. Selama periode ini, masalah jaringan dapat mengganggu koneksi dan menyebabkan impor gagal. Oleh karena itu, untuk volume data besar, kami menyarankan agar Anda menggunakan SUBMIT JOB INSERT OVERWRITE SELECT untuk melakukan impor secara asinkron.

    • Metode 1: Jalankan pernyataan INSERT INTO untuk mengimpor data. Jika terjadi duplikasi primary key, operasi penulisan saat ini akan diabaikan dan data tidak diperbarui. Perilaku ini setara dengan INSERT IGNORE INTO. Untuk informasi selengkapnya, lihat INSERT INTO. Berikut adalah contoh pernyataan:

      INSERT INTO adb_oss_import_test
      SELECT * FROM oss_import_test_external_table;
    • Metode 2: Jalankan pernyataan INSERT OVERWRITE untuk mengimpor data, menimpa data yang sudah ada di tabel. Berikut adalah contoh pernyataan:

      INSERT OVERWRITE adb_oss_import_test
      SELECT * FROM oss_import_test_external_table;
    • Metode 3: Jalankan pernyataan INSERT OVERWRITE secara asinkron untuk mengimpor data. Anda dapat menggunakan SUBMIT JOB untuk mengirimkan tugas asinkron guna penjadwalan latar belakang. Anda dapat menambahkan hint (/*+ direct_batch_load=true*/) sebelum tugas penulisan untuk mempercepat tugas tersebut. Untuk informasi selengkapnya, lihat Penulisan asinkron. Berikut adalah contoh pernyataan:

      SUBMIT JOB INSERT OVERWRITE adb_oss_import_test
      SELECT * FROM oss_import_test_external_table;

      Hasil berikut dikembalikan:

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

      Untuk informasi selengkapnya tentang cara mengirimkan tugas asinkron, lihat Kirimkan pekerjaan impor asinkron.

Sintaksis tabel eksternal OSS

Edisi Perusahaan, Edisi Dasar, dan Edisi Danau Data Terpadu

Untuk informasi tentang sintaksis pembuatan tabel eksternal OSS di Edisi Perusahaan, Edisi Dasar, dan Edisi Danau Data Terpadu, lihat Tabel eksternal OSS.

Data Warehouse

Tabel eksternal OSS non-partisi

CREATE TABLE [IF NOT EXISTS] table_name
(column_name column_type[, …])
ENGINE='OSS'
TABLE_PROPERTIES='{
    "endpoint":"endpoint",
    "url":"OSS_LOCATION",
    "accessid":"accesskey_id",
    "accesskey":"accesskey_secret",
    "format":"csv|orc|parquet|text
    "delimiter|field_delimiter":";",
    "skip_header_line_count":1,
    "charset":"utf-8"
}';

Jenis tabel eksternal

Parameter

Wajib

Deskripsi

Tabel eksternal dalam format CSV, Parquet, dan ORC

ENGINE='OSS'

Ya

Mesin tabel. Tetapkan nilainya ke OSS.

endpoint

Endpoint bucket OSS. Saat ini, AnalyticDB for MySQL hanya dapat mengakses OSS melalui jaringan VPC.

Catatan

Masuk ke Konsol OSS, klik bucket target, dan lihat Endpoint pada halaman Overview bucket.

url

Jalur ke file atau direktori OSS.

  • Untuk file OSS, tentukan jalur mutlak. Contoh: oss://testBucketname/adb/oss_import_test_data.csv.

  • Jalur direktori harus diakhiri dengan garis miring (/). Contoh: oss://testBucketname/adb/.

    Catatan

    Tabel eksternal akan mencakup semua data dari direktori yang ditentukan.

  • Gunakan karakter wildcard (*) di akhir jalur untuk mencocokkan semua file atau folder dengan awalan tertentu. Contoh: oss://testBucketname/adb/list_file_with_prefix/test*

    Catatan

    Karakter wildcard dalam contoh ini mencocokkan semua file dan folder yang sesuai dengan awalan, seperti oss://testBucketname/adb/list_file_with_prefix/testfile1 dan

    oss://testBucketname/adb/list_file_with_prefix/test1/file2.

accessid

ID AccessKey dari Akun Alibaba Cloud atau Pengguna RAM yang memiliki izin OSS.

Untuk informasi tentang cara memperoleh ID AccessKey, lihat Akun dan izin.

accesskey

Rahasia AccessKey dari Akun Alibaba Cloud atau Pengguna RAM yang memiliki izin OSS.

Untuk memperoleh Rahasia AccessKey, lihat Akun dan izin.

format

Wajib bersyarat

Format file.

  • Untuk membuat tabel eksternal Parquet, Anda harus menetapkan parameter ini ke parquet.

  • Untuk membuat tabel eksternal ORC, Anda harus menetapkan parameter ini ke orc.

  • Untuk membuat tabel eksternal Text, Anda harus menetapkan parameter ini ke text.

  • Jika Anda tidak menentukan parameter ini, format file default adalah csv.

    Catatan

    Nilai parameter ini peka terhadap huruf besar/kecil.

Tabel eksternal dalam format CSV dan Text

delimiter|field_delimiter

Ya

Pemisah kolom file data.

  • Jika jenis file adalah csv, nama parameternya adalah delimiter.

  • Jika jenis file adalah text, nama parameternya adalah field_delimiter.

Tabel eksternal dalam format CSV

null_value

Tidak

Menentukan apa yang merepresentasikan nilai NULL dalam file data CSV. Secara default, nilai kosong diperlakukan sebagai NULL. Contoh: "null_value": "".

Penting

Parameter ini memerlukan kluster dengan kernel versi 3.1.4.2 atau lebih baru.

ossnull

Menentukan aturan untuk menginterpretasikan nilai NULL dalam file data CSV. Nilai yang valid:

  • 1 (default): EMPTY_SEPARATORS. Hanya memperlakukan nilai kosong sebagai NULL.

    Contoh: a,"",,c --> "a","",NULL,"c"

  • 2: EMPTY_QUOTES. Hanya memperlakukan "" sebagai NULL.

    Contoh: a,"",,c --> "a",NULL,"","c"

  • 3: BOTH. Memperlakukan baik nilai kosong maupun "" sebagai NULL.

    Contoh: a,"",,c --> "a",NULL,NULL,"c"

  • 4: NEITHER. Tidak memperlakukan baik nilai kosong maupun "" sebagai NULL.

    Contoh: a,"",,c --> "a","","","c"

Catatan

Contoh di atas mengasumsikan bahwa "null_value": "".

skip_header_line_count

Jumlah baris yang dilewati dari awal file data. Misalnya, jika file CSV memiliki baris header, tetapkan parameter ini ke 1 untuk melewatinya.

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

oss_ignore_quote_and_escape

Jika diatur ke true, tanda kutip dan karakter escape dalam nilai bidang akan diabaikan. Default-nya adalah false.

Penting

Parameter ini memerlukan kluster dengan kernel versi 3.1.4.2 atau lebih baru.

charset

Set karakter tabel eksternal OSS. Nilai yang valid:

  • utf-8 (default)

  • gbk

Penting

Parameter ini memerlukan kluster dengan kernel versi 3.1.10.4 atau lebih baru.

Catatan
  • Nama kolom dan urutannya dalam pernyataan CREATE EXTERNAL TABLE harus sesuai dengan file sumber Parquet atau ORC. Nama kolom tidak peka terhadap 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.

AnalyticDB for MySQL dapat membaca dan menulis file Hive TEXT menggunakan tabel eksternal OSS dalam format CSV. Gunakan pernyataan berikut untuk membuat tabel:

CREATE TABLE adb_csv_hive_format_oss (
  a tinyint,
  b smallint,
  c int,
  d bigint,
  e boolean,
  f float,
  g double,
  h varchar,
  i varchar, -- binary
  j timestamp,
  k DECIMAL(10, 4),
  l varchar, -- char(10)
  m varchar, -- varchar(100)
  n date
) ENGINE = 'OSS' TABLE_PROPERTIES='{
    "format": "csv",
    "endpoint":"oss-cn-hangzhou-internal.aliyuncs.com",
    "accessid":"accesskey_id",
    "accesskey":"accesskey_secret",
    "url":"oss://testBucketname/adb_data/",
    "delimiter": "\\1",
    "null_value": "\\\\N",
    "oss_ignore_quote_and_escape": "true",
    "ossnull": 2
}';
Catatan

Perhatikan poin-poin berikut saat membuat tabel eksternal OSS dalam format CSV untuk membaca file Hive TEXT:

  • Pemisah kolom default untuk file Hive TEXT adalah \1. Saat menggunakan tabel eksternal OSS berformat CSV untuk membaca atau menulis file tersebut, Anda harus menetapkan parameter delimiter ke nilai yang di-escape \\1.

  • Nilai NULL default untuk file Hive TEXT adalah \N. Saat menggunakan tabel eksternal OSS berformat CSV untuk membaca atau menulis file tersebut, Anda harus menetapkan parameter null_value ke nilai yang di-escape \\\\N.

  • Tipe data dasar Hive lainnya, seperti BOOLEAN, dipetakan langsung ke tipe data AnalyticDB for MySQL. Namun, tipe BINARY, CHAR(n), dan VARCHAR(n) semuanya dipetakan ke tipe AnalyticDB for MySQL VARCHAR.

Lampiran: Pemetaan tipe data

Penting
  • Tipe data yang Anda tentukan saat membuat tabel harus sesuai dengan pemetaan dalam tabel berikut. Untuk tipe DECIMAL, presisi juga harus sesuai.

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

  • Tabel eksternal ORC tidak mendukung tipe kompleks seperti LIST, STRUCT, dan UNION. Jika Anda menggunakan tipe-tipe ini, pembuatan tabel akan gagal. Anda dapat membuat tabel eksternal ORC yang berisi kolom bertipe MAP, tetapi kueri terhadap tabel tersebut akan gagal.

Pemetaan tipe data file Parquet dan AnalyticDB for MySQL

Tipe primitif Parquet

Tipe logis Parquet

AnalyticDB for MySQL tipe

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 berisi JSON)

INT32

DATE

DATE

INT64

TIMESTAMP_MILLIS

TIMESTAMP atau DATETIME

INT96

Tidak ada

TIMESTAMP atau DATETIME

Pemetaan tipe data file ORC ke AnalyticDB for MySQL

Tipe ORC

AnalyticDB for MySQL tipe

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 berisi JSON)

TIMESTAMP

TIMESTAMP atau DATETIME

DATE

DATE

Pemetaan tipe data file Paimon dan AnalyticDB for MySQL

Tipe Paimon

AnalyticDB for MySQL tipe

CHAR

VARCHAR

VARCHAR

VARCHAR

BOOLEAN

BOOLEAN

BINARY

VARBINARY

VARBINARY

VARBINARY

DECIMAL

DECIMAL

TINYINT

TINYINT

SMALLINT

SMALLINT

INT

INTEGER

BIGINT

BIGINT

FLOAT

REAL

DOUBLE

DOUBLE

DATE

DATE

TIME

Tidak didukung

TIMESTAMP

TIMESTAMP

LocalZonedTIMESTAMP

TIMESTAMP (mengabaikan informasi zona waktu lokal)

ARRAY

ARRAY

MAP

MAP

ROW

ROW