All Products
Search
Document Center

MaxCompute:Tabel eksternal Hologres

Last Updated:Jul 02, 2026

Topik ini menjelaskan cara membuat tabel eksternal Hologres dengan menentukan detail berikut dalam pernyataan CREATE TABLE: sumber data Hologres, metode otorisasi (baik autentikasi STS maupun peran terkait layanan), tabel target, dan informasi driver JDBC.

Ikhtisar

Hologres adalah gudang data analitik interaktif real-time yang kompatibel dengan protokol PostgreSQL dan terintegrasi secara mulus dengan MaxCompute. Anda dapat membuat tabel eksternal Hologres di MaxCompute untuk mengkueri sumber data Hologres menggunakan driver JDBC PostgreSQL dan autentikasi STS. Metode ini menghilangkan penyimpanan berlebihan, tidak memerlukan impor atau ekspor data, serta memberikan hasil kueri yang cepat.

Batasan

  • Manipulasi data (DML)

    • MaxCompute tidak mendukung operasi UPDATE atau DELETE pada tabel eksternal Hologres.

    • Tabel eksternal Hologres tidak mendukung pernyataan INSERT OVERWRITE.

      Untuk menimpa data di tabel Hologres dengan data dari MaxCompute, jalankan pernyataan INSERT OVERWRITE di Hologres. Pernyataan ini membaca data dari tabel eksternal di Hologres yang dipetakan ke tabel MaxCompute. Untuk informasi selengkapnya, lihat INSERT OVERWRITE.

  • Risiko penulisan data

    Ketika Anda menulis volume data besar ke tabel eksternal Hologres, proses penulisan paralel digunakan. Dalam kasus langka, salah satu proses tersebut mungkin menulis ulang data, menyebabkan duplikasi data.

  • Partisi

    Tabel partisi di Hologres dan MaxCompute tidak saling memetakan secara langsung. Tabel eksternal Hologres tidak mendukung partisi. Namun, dalam mode direct-read, ketika Anda mengkueri tabel eksternal Hologres yang memetakan ke tabel induk partisi Hologres, pemangkasan partisi berlaku jika filter kueri mencakup kondisi pada kolom partisi dari tabel anak partisi yang mendasari.

  • Tabel eksternal Hologres tidak mendukung atribut cluster.

  • Tabel eksternal Hologres tidak mendukung pemetaan ke Dynamic Table Hologres.

  • Lihat daftar Tipe data yang didukung.

Buat tabel eksternal Hologres

Anda dapat membuat tabel eksternal Hologres menggunakan otorisasi peran RAM untuk Hologres (mode STS) atau mode otorisasi peran terkait layanan (mode double-signature).

Pertimbangan

Pedoman pembuatan tabel eksternal

  • Jika instans Hologres Anda menggunakan daftar putih IP untuk akses eksternal, tingkatkan ke versi yang didukung:

    • Untuk mode otorisasi peran RAM, tingkatkan ke Hologres V3.2 atau yang lebih baru.

    • Untuk mode otorisasi peran terkait layanan, tingkatkan ke Hologres V2.0.28 atau yang lebih baru.

    Setelah peningkatan, Hologres secara otomatis mempercayai IP node MaxCompute berdasarkan identitas layanan MaxCompute atau peran terkait layanan. Anda tidak perlu lagi menambahkan alamat IP node elastis MaxCompute ke daftar putih IP instans Hologres Anda.

  • Anda dapat memetakan baik tabel induk maupun tabel anak di Hologres ke tabel eksternal. Namun, Anda hanya dapat membaca dari, bukan menulis ke, tabel eksternal yang memetakan ke tabel induk.

  • Ketika Anda menulis data ke tabel eksternal Hologres, mekanisme INSERT ON CONFLICT (UPSERT) tidak didukung. Jika tabel sumber Hologres memiliki primary key, hindari menulis data yang menyebabkan konflik primary key.

  • Nama tabel dan nama kolom tidak peka huruf besar/kecil. Anda tidak dapat menerapkan sensitivitas huruf besar/kecil saat membuat atau mengkueri tabel dan kolom.

Kompatibilitas skema

Jika skema tabel sumber Hologres tidak sesuai dengan skema tabel eksternal, perhatikan poin-poin berikut:

  • Jumlah kolom tidak sesuai: Jika tabel sumber memiliki lebih sedikit kolom daripada tabel eksternal, pembacaan data gagal dengan kesalahan seperti column "xxx" does not exist. Jika tabel sumber memiliki lebih banyak kolom daripada tabel eksternal, kolom tambahan diabaikan.

  • Tipe kolom tidak sesuai: MaxCompute tidak dapat memetakan kolom STRING dari tabel sumber Hologres ke kolom INT di tabel eksternal. Memetakan kolom INT ke kolom STRING didukung tetapi tidak disarankan.

Sintaks

Ketika membuat tabel eksternal, Anda harus menentukan StorageHandler dalam pernyataan DDL, serta mengonfigurasi string koneksi JDBC dan informasi autentikasi STS (atau mengaktifkan mode otorisasi peran terkait layanan) untuk mengakses sumber data Hologres.

Mode peran RAM

Untuk contoh kode lengkap, lihat Buat tabel eksternal Hologres (mode otorisasi peran RAM).

CREATE EXTERNAL TABLE [IF NOT EXISTS] <table_name>(
  <col1_name> <data_type>,
  <col2_name> <data_type>,
  ......
)
stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
WITH serdeproperties (
  'odps.properties.rolearn'='<ram_arn>')
location '<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>' 
tblproperties (
  'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
  'odps.federation.jdbc.target.db.type'='holo',
  'odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>, <table_column2>:<source_column2>,...'
);

Mode peran terkait layanan

Untuk contoh kode lengkap, lihat Buat tabel eksternal Hologres (mode otorisasi peran terkait layanan).

Mode otorisasi peran terkait layanan memungkinkan pengguna RAM yang sama mengakses tabel yang diotorisasi di MaxCompute dan Hologres tanpa memerlukan otorisasi manual. Mode ini juga mendukung fitur daftar putih IP Hologres untuk menyederhanakan penggunaan.

-- Buat tabel eksternal
CREATE EXTERNAL TABLE [IF NOT EXISTS]  <table_name>(
  <col1_name> <data_type>,
  <col2_name> <data_type>,
  ......
)
STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
LOCATION '<jdbc:postgresql://<endpoint>:<port>/<database>?ApplicationName=MaxCompute&[currentSchema=<schema>&][useSSL={true|false}&]table=<holo_table_name>/>' 
tblproperties (
  'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver', 
  'odps.federation.jdbc.target.db.type'='holo',
  ['odps.federation.jdbc.colmapping'='<table_column1>:<source_column1>, <table_column2>:<source_column2>,...']
);

Parameter

Klik untuk melihat detail parameter

Parameter

Wajib

Deskripsi

IF NOT EXISTS

Tidak

  • Jika Anda tidak menentukan opsi IF NOT EXISTS dan tabel dengan nama yang sama sudah ada, kesalahan akan dilaporkan.

  • Jika Anda menentukan IF NOT EXISTS, pernyataan berhasil terlepas dari apakah tabel dengan nama yang sama sudah ada. Metadata tabel yang ada tidak dimodifikasi, meskipun skemanya berbeda dari yang Anda buat.

table_name

Ya

Nama tabel eksternal Hologres yang akan dibuat di MaxCompute.

col_name

Ya

Nama kolom di tabel eksternal Hologres.

data_type

Ya

Tipe data kolom di tabel eksternal Hologres.

STORED BY

Ya

Menentukan StorageHandler yang mendefinisikan cara mengkueri tabel eksternal Hologres.

Atur nilainya ke com.aliyun.odps.jdbc.JdbcStorageHandler untuk menggunakan metode koneksi JDBC.

ram_arn

Ya

Parameter ini wajib saat membuat tabel eksternal Hologres dalam mode STS. Parameter ini menentukan ARN peran RAM untuk autentikasi STS. Untuk informasi selengkapnya tentang cara membuat peran RAM dan memberikan izin, lihat Otorisasi peran RAM Hologres.

  1. Login ke Konsol RAM.

  2. Di bilah navigasi kiri, pilih Identities > Roles.

  3. Di halaman Roles, klik Role Name target untuk membuka halaman detail peran.

  4. Di bagian Basic Information, Anda dapat memperoleh ARN.

Tidak

Parameter ini tidak diperlukan dalam mode double-signature.

LOCATION

Ya

String koneksi JDBC untuk instans Hologres. String ini berisi parameter berikut:

  • endpoint: Wajib. nama domain jaringan klasik instans Hologres.

    Penting

    Saat ini, Anda hanya dapat terhubung ke Hologres melalui jaringan klasik. Koneksi melalui VPC tidak didukung.

  • port: Wajib. port jaringan instans Hologres.

    1. Login ke Konsol manajemen Hologres. Di pojok kiri atas, pilih wilayah.

    2. Di panel navigasi kiri, klik Instances.

      Di halaman Instances, klik nama instans target.

    3. Di bagian Network Information, temukan nama domain dan port jaringan klasik instans Hologres.

  • database: Wajib. Nama database Hologres target. Untuk informasi selengkapnya, lihat CREATE DATABASE.

  • ApplicationName: Wajib. Nilai default adalah MaxCompute. Anda tidak perlu mengubah nilai ini.

  • schema: Opsional. Anda dapat mengabaikan parameter ini jika nama tabel unik dalam database atau jika tabel sumber berada dalam skema default. Untuk informasi selengkapnya, lihat CREATE SCHEMA.

  • holo_table_name: Wajib. Nama tabel sumber Hologres. Untuk informasi selengkapnya, lihat CREATE TABLE.

tblproperties

Ya

  • mcfed.mapreduce.jdbc.driver.class: Wajib.

    Menentukan driver untuk menghubungkan ke database Hologres. Nilainya harus org.postgresql.Driver.

  • odps.federation.jdbc.target.db.type: Wajib.

    Menentukan tipe database. Nilainya harus holo.

  • odps.federation.jdbc.colmapping: Opsional.

    Menentukan pemetaan antara kolom tabel eksternal dan kolom tabel sumber Hologres.

    • Jika parameter ini tidak dikonfigurasi, kolom dipetakan berdasarkan nama antara tabel sumber dan eksternal.

    • Jika Anda mengonfigurasi parameter ini hanya untuk beberapa kolom, kolom yang ditentukan dipetakan sesuai definisi, sedangkan kolom sisanya dipetakan berdasarkan nama. Kesalahan terjadi jika nama atau tipe data kolom yang dipetakan secara otomatis tidak cocok.

    • Jika nama kolom Hologres mengandung huruf kapital, sertakan nama kolom dalam tanda kutip ganda (""). Format: MaxCompute_column_1:"Hologres_column_1"[,MaxCompute_column_2:"Hologres_column_2",...].

      Catatan

      Asumsikan tabel sumber Hologres berisi kolom c bool, map_B string, a bigint, dan tabel eksternal berisi kolom a bigint, x string, c bool.

      Jika konfigurasi colmapping diatur ke 'x: "map_B"', Anda dapat berhasil memetakan dan mengkueri data Hologres.

  • mcfed.mapreduce.jdbc.input.query: Opsional.

    Membaca data dari tabel sumber data Hologres. Kolom, nama kolom, dan tipe data tabel eksternal harus sesuai dengan tabel sumber, atau alias jika digunakan. Format select_sentence adalah SELECT xxx FROM <holo_database_name>.<holo_schema_name>.<holo_table_name>.

Contoh

Langkah 1: Siapkan data Hologres

Anda dapat melewati langkah ini jika sudah memiliki database, tabel, dan data uji Hologres.

Buat database Hologres

  1. Login ke Konsol manajemen Hologres. Di pojok kiri atas, pilih wilayah.

  2. Di panel navigasi kiri, klik Instances.

  3. Jika Anda belum memiliki instans, Anda harus terlebih dahulu membeli instans Hologres.

    Di halaman Instances, klik nama instans target.

  4. Di halaman detail instans, klik Connect to Instance.

  5. Klik tab Metadata Management.

    Klik Create Database, masukkan Database Name di kotak dialog yang muncul, dan biarkan parameter lain pada pengaturan defaultnya.

Buat tabel Hologres

  1. Di halaman detail instans, klik Connect to Instance.

  2. Klik tab SQL Editor.

  3. Jalankan pernyataan berikut untuk membuat tabel dan memasukkan data:

    CREATE TABLE IF NOT EXISTS holo (
        id   INT PRIMARY KEY,
        name TEXT
    );
    INSERT INTO holo (id, name) VALUES
        (1, 'kate'),
        (2, 'mary'),
        (3, 'bob'),
        (4, 'tom'),
        (5, 'lulu'),
        (6, 'mark'),
        (7, 'haward'),
        (8, 'lilei'),
        (9, 'hanmeimei'),
        (10, 'lily'),
        (11, 'lucy');
    SELECT * FROM holo ORDER BY id;

Langkah 2: Buat tabel eksternal Hologres

Peran RAM

Dalam mode ini, pembuat tabel eksternal menyematkan peran RAM dengan izin akses data Hologres dalam definisi tabel eksternal. Anda kemudian dapat memberikan izin pada tabel eksternal ini kepada pengguna MaxCompute lain sesuai kebutuhan. Saat pengguna mengakses tabel eksternal, sistem menggunakan peran RAM yang terikat untuk mengakses data di tabel Hologres yang dipetakan.

Hologres tidak mendukung penambahan peran RAM lintas akun ke instans database. Oleh karena itu, Hologres dalam mode STS hanya mendukung peran RAM dari akun yang sama. Demikian pula, saat MaxCompute mengakses Hologres menggunakan tabel eksternal atau skema eksternal, hanya peran RAM dari akun yang sama yang didukung.

Prasyarat

  1. Anda telah menginstal dan mengonfigurasi klien MaxCompute.

  2. Anda memiliki proyek MaxCompute target tempat Anda ingin membuat tabel eksternal Hologres.

    Untuk informasi selengkapnya, lihat Buat proyek MaxCompute.

  3. Anda telah membuat dan mengotorisasi Peran RAM. Untuk informasi selengkapnya, lihat Mengotorisasi Peran RAM untuk Hologres.

Buat tabel eksternal di MaxCompute

  1. Login ke klien MaxCompute dan beralih ke proyek MaxCompute target Anda.

  2. Jalankan pernyataan berikut untuk membuat tabel eksternal Hologres.

    Contoh berikut menggunakan data yang disiapkan di Langkah 1: Siapkan data Hologres:

    • Nama database Hologres: holo_external_test.

    • Skema database Hologres: public.

    • Nama tabel Hologres: holo.

    • Endpoint jaringan klasik Hologres: hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80.

    CREATE EXTERNAL TABLE IF NOT EXISTS my_table_holo_jdbc
    (
     id bigint,
     name string
    )
    stored BY 'com.aliyun.odps.jdbc.JdbcStorageHandler' 
    WITH serdeproperties (
      'odps.properties.rolearn'='acs:ram::139699392458****:role/<role name>')
    location 'jdbc:postgresql://hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80/<holo database name>?ApplicationName=MaxCompute&currentSchema=public&useSSL=true&table=<table name>/'
    tblproperties (
      'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
      'odps.federation.jdbc.target.db.type'='holo',
      'odps.federation.jdbc.colmapping'='id:id,name:name'
    );
  3. Jalankan perintah berikut untuk mengkueri tabel sumber Hologres menggunakan tabel eksternal yang baru dibuat.

    -- Properti berikut wajib untuk mengakses tabel eksternal Hologres.
    SET odps.sql.split.hive.bridge=true;
    SET odps.sql.hive.compatible=true;
    SET odps.table.api.enable.holo.table=true; --Aktifkan akses baca langsung JDBC 
    -- Kueri data dari tabel eksternal Hologres.
    SELECT * FROM my_table_holo_jdbc limit 10;
    -- Perintah mengembalikan hasil berikut.
    +------------+------------+
    | id         | name       | 
    +------------+------------+
    | 9          | hanmeimei  | 
    | 4          | tom        | 
    | 7          | haward     | 
    | 2          | mary       | 
    | 5          | lulu       | 
    | 8          | lilei      | 
    | 10         | lily       | 
    | 1          | kate       | 
    | 6          | mark       | 
    | 11         | lucy       | 
    +------------+------------+
  4. Gunakan tabel eksternal Hologres untuk bertukar data dengan Hologres dan melakukan analisis federasi.

    • Tulis data yang diproses di MaxCompute ke Hologres menggunakan tabel eksternal untuk analitik dipercepat dan layanan online.

      -- Properti berikut wajib untuk mengakses tabel eksternal Hologres.
      SET odps.sql.split.hive.bridge=true;
      SET odps.sql.hive.compatible=true;
      SET odps.table.api.enable.holo.table=true; --Aktifkan akses baca langsung JDBC 
      -- Masukkan data ke tabel eksternal Hologres.
      INSERT INTO my_table_holo_jdbc VALUES (12,'alice');
      -- Kueri data dari tabel eksternal Hologres.
      SELECT * FROM my_table_holo_jdbc;
      -- Perintah mengembalikan hasil berikut.
      +------------+------------+
      | id         | name       | 
      +------------+------------+
      | 9          | hanmeimei  | 
      | 4          | tom        | 
      | 7          | haward     | 
      | 2          | mary       | 
      | 5          | lulu       | 
      | 12         | alice      | 
      | 8          | lilei      | 
      | 10         | lily       | 
      | 1          | kate       | 
      | 11         | lucy       | 
      | 6          | mark       | 
      | 3          | bob        | 
      +------------+------------+
    • Simpan tabel dimensi yang sering diperbarui di Hologres untuk mendukung pembaruan real-time. MaxCompute mengakses tabel dimensi menggunakan tabel eksternal dan menggabungkannya dengan tabel fakta di MaxCompute untuk analisis federasi.

      -- Properti berikut wajib untuk mengakses tabel eksternal Hologres.
      SET odps.sql.split.hive.bridge=true;
      SET odps.sql.hive.compatible=true;
      -- Buat tabel internal MaxCompute.
      CREATE TABLE holo_test AS SELECT * FROM my_table_holo_jdbc;
      -- Gabungkan tabel internal MaxCompute dengan tabel eksternal Hologres untuk analisis.
      SELECT * FROM my_table_holo_jdbc t1 INNER JOIN holo_test t2 ON t1.id=t2.id;
      -- Perintah mengembalikan hasil berikut.
      +------------+------------+------------+------------+
      | id         | name       | id2        | name2      | 
      +------------+------------+------------+------------+
      | 9          | hanmeimei  | 9          | hanmeimei  | 
      | 4          | tom        | 4          | tom        | 
      | 7          | haward     | 7          | haward     | 
      | 2          | mary       | 2          | mary       | 
      | 5          | lulu       | 5          | lulu       | 
      | 12         | alice      | 12         | alice      | 
      | 8          | lilei      | 8          | lilei      | 
      | 10         | lily       | 10         | lily       | 
      | 1          | kate       | 1          | kate       | 
      | 11         | lucy       | 11         | lucy       | 
      | 6          | mark       | 6          | mark       | 
      | 3          | bob        | 3          | bob        | 
      +------------+------------+------------+------------+

Peran terkait layanan

Dalam mode ini, Anda harus membuat peran terkait layanan untuk mengakses data Hologres. Untuk mencegah akses tidak sah, mode ini meneruskan identitas pengguna ke Hologres untuk autentikasi. Oleh karena itu, pengguna harus memiliki izin pada tabel eksternal dan tabel Hologres yang mendasarinya.

Prasyarat

  1. Anda telah menginstal dan mengonfigurasi klien MaxCompute.

  2. Anda memiliki proyek MaxCompute target tempat Anda ingin membuat tabel eksternal Hologres.

    Untuk informasi selengkapnya, lihat Buat proyek MaxCompute.

  3. Akun dengan nama yang sama dengan akun MaxCompute Anda ada di Hologres, dan akun ini memiliki izin baca dan tulis pada tabel target.

  4. Mode otorisasi peran terkait layanan ini hanya didukung di Hologres V1.3 dan yang lebih baru. Saat ini, mode ini hanya mendukung pembacaan dari, bukan penulisan ke, tabel eksternal Hologres.

Buat tabel eksternal di MaxCompute

  1. Login ke klien MaxCompute dan beralih ke proyek MaxCompute target Anda.

  2. Jalankan pernyataan berikut untuk membuat tabel eksternal Hologres.

    Contoh berikut menggunakan data yang disiapkan di Langkah 1: Siapkan data Hologres:

    • Nama database Hologres: holo_external_test.

    • Skema database Hologres: public.

    • Nama tabel Hologres: holo.

    • Endpoint jaringan klasik Hologres: hgprecn-cn-oew210ut****-cn-hangzhou-internal.hologres.aliyuncs.com:80.

    -- Buat tabel eksternal.
    CREATE EXTERNAL TABLE IF NOT EXISTS holo_mc_external_dbl
    (
      id int,
      name string
    )
    STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
    location 'jdbc:postgresql://hgpostcn-cn-****-cn-hangzhou-internal.hologres.aliyuncs.com:80/<holo database name>?ApplicationName=MaxCompute&currentSchema=public&useSSL=false&table=<table name>/'
    TBLPROPERTIES (
      'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
      'odps.federation.jdbc.target.db.type'='holo',
      'odps.federation.jdbc.colmapping'='id:id,name:name'
    );
  3. Kueri tabel eksternal.

    SELECT * FROM holo_mc_external_dbl;
    -- Perintah mengembalikan hasil berikut.
    +------------+------------+
    | id         | name       | 
    +------------+------------+
    | 9          | hanmeimei  | 
    | 4          | tom        | 
    | 7          | haward     | 
    | 2          | mary       | 
    | 5          | lulu       | 
    | 12         | alice      | 
    | 8          | lilei      | 
    | 10         | lily       | 
    | 1          | kate       | 
    | 11         | lucy       | 
    | 6          | mark       | 
    | 3          | bob        | 
    +------------+------------+

Aktifkan baca langsung untuk tabel eksternal Hologres

Secara default, MaxCompute membaca data dari tabel eksternal Hologres melalui koneksi JDBC. Untuk meningkatkan kinerja, Anda dapat mengaktifkan mode baca langsung yang memungkinkan MaxCompute mengakses langsung lapisan penyimpanan Hologres. Mode ini memberikan manfaat berikut:

  • Mengurangi latensi baca untuk kinerja kueri yang lebih cepat.

  • Meminimalkan jumlah koneksi ke frontend Hologres. Sebagian besar kueri hanya memerlukan satu koneksi.

Batasan

Ketika Anda mengaktifkan mode baca langsung untuk Hologres, batasan berikut berlaku. Jika kondisi ini tidak terpenuhi, kueri akan kembali ke mode JDBC.

  1. Persyaratan versi

    Instans Hologres Anda harus V1.3.34 atau yang lebih baru. Fitur baca langsung tidak didukung di versi sebelumnya.

  2. Batasan tipe tabel

    • Mode baca langsung tidak didukung untuk tabel penyimpanan dingin Hologres.

    • Mode baca langsung tidak didukung untuk tabel berorientasi baris Hologres.

  3. Batasan pemetaan tipe data

    Ketika Anda menggunakan mode baca langsung, memetakan tipe Timestamp With Time Zone di Hologres ke tipe TIMESTAMP di MaxCompute dapat menyebabkan perbedaan waktu kecil. Perbedaannya sebagai berikut:

    • Perbedaan nilai waktu

      • Untuk timestamp sebelum 1900-12-31 15:54:15, waktu yang dikembalikan oleh MaxCompute lebih cepat 5 menit 44 detik.

      • Untuk timestamp antara 1900-12-31 15:54:16 dan 1969-12-31 23:59:58, waktu yang dikembalikan oleh MaxCompute lebih cepat 1 detik.

      • Untuk timestamp setelah 1969-12-31 23:59:59, waktu di Hologres dan MaxCompute identik.

    • Offset zona waktu

      • Sebagai contoh, jika zona waktu MaxCompute adalah UTC+8 dan kolom Timestamp With Time Zone di Hologres adalah 2000-01-01 00:00:00, MaxCompute mengembalikan 2000-01-01 08:00:00.

      • Sebagai contoh, jika zona waktu MaxCompute adalah UTC+8 dan kolom Timestamp With Time Zone di Hologres adalah 1969-01-01 00:00:00, MaxCompute mengembalikan 1969-01-01 08:00:01.

  4. Batasan wilayah yang sama

    Karena kendala konektivitas jaringan, MaxCompute hanya dapat mengakses instans Hologres di wilayah yang sama. Akses lintas wilayah gagal dengan kesalahan berikut: FAILED: ODPS-0010000:System internal error - fuxi job failed, caused by: Pangu request failed with error code 3.

  5. Jika instans Hologres Anda menggunakan arsitektur primary/secondary, Anda hanya dapat menentukan instans utama dalam URL koneksi, bukan instans secondary.

  6. Batasan tambahan untuk mode Foreign Server: Anda harus mengaktifkan sakelar sintaks tingkat skema untuk proyek MaxCompute.

Aktifkan mode baca langsung

Untuk mengaktifkan mode baca langsung untuk sesi Anda, tambahkan perintah berikut sebelum kueri SQL Anda di MaxCompute:

SET odps.table.api.enable.holo.table=true;

Anda juga dapat mengaktifkan atau menonaktifkan mode baca langsung di tingkat proyek.

-- Anda dapat mengaktifkan baca langsung dan menonaktifkan fallback JDBC default di tingkat proyek.
-- Aktifkan baca langsung di tingkat proyek: 
setproject odps.table.api.enable.holo.table=true; -- Atur ke true untuk mengaktifkan, false untuk menonaktifkan.
-- Nonaktifkan fallback default ke JDBC: 
setproject odps.table.api.allow.fallback.jdbc=false; -- Atur ke true untuk mengizinkan fallback, false untuk mencegahnya.

Verifikasi mode baca langsung

Untuk memverifikasi bahwa kueri menggunakan mode baca langsung, periksa log di Logview. Untuk informasi selengkapnya tentang cara menggunakan Logview, lihat Gunakan Logview 2.0 untuk melihat informasi eksekusi pekerjaan.

Di tab Summary di Logview, temukan bidang external holo tables. Formatnya sebagai berikut:

<project_name>.<table_name>:<access mode>[<(fallback reason)>]

Parameter:

Parameter

Deskripsi

project_name

Nama proyek.

table_name

Nama tabel.

access mode

Mode akses untuk tabel eksternal. Nilai yang valid:

  • Optimized: Menunjukkan bahwa mode baca langsung digunakan. Berikut adalah contoh Logview. Optimized: Menunjukkan bahwa mode optimasi baca langsung diaktifkan. Di bagian Summary Logview, external holo tables: <project_name>.<table_name>:Optimized ditampilkan, yang menunjukkan bahwa tabel Holo eksternal telah menggunakan jalur optimasi baca langsung.

  • Fallback: Menunjukkan bahwa sistem telah kembali ke mode JDBC. Berikut adalah contoh dari Logview. Di tab Summary, jika bagian external holo tables menampilkan pesan Fallback, seperti aliorc_test.holo_lineitem:Fallback (Column type map error Column name l_orderkey Odps type 3 Holo type 4), ini menunjukkan bahwa mode baca langsung tidak digunakan. Sebaliknya, sistem kembali ke mode Fallback karena kesalahan pemetaan tipe kolom.

fallback reason

Jika access mode adalah Fallback, parameter ini menjelaskan mengapa kueri kembali ke mode JDBC. Alasan yang mungkin dan solusinya meliputi:

  • Column type map error Column name ${ColumnName}: Tipe data kolom di tabel MaxCompute tidak kompatibel dengan kolom yang sesuai di tabel Hologres. Untuk mengatasi ini, ubah tipe data di tabel eksternal agar sesuai dengan pemetaan tipe data.

  • Holo connection error: Koneksi ke instans Hologres gagal. Penyebab yang mungkin termasuk izin salah atau status instans tidak valid. Pastikan pengguna saat ini memiliki izin yang diperlukan untuk mengakses database Hologres dan instans Hologres sedang berjalan.

  • Odps table is partition table: Mode baca langsung tidak didukung untuk tabel eksternal partisi.

  • Select hg_version error, Hologres version check error, atau Fetch hg_version data error: Versi instans Hologres salah. Untuk mengatasi ini, tingkatkan instans Hologres ke V1.3.34 atau yang lebih baru. Untuk informasi selengkapnya, lihat Tingkatkan instans.

Ketika pekerjaan yang menggunakan mode baca langsung menghadapi batasan, pekerjaan tersebut secara otomatis kembali ke mode JDBC. Di bawah beban kerja berat, fallback ini dapat mengonsumsi sumber daya signifikan dari kolam koneksi Hologres, dan transfer data dalam mode JDBC jauh lebih tidak efisien daripada dalam mode baca langsung. Akibatnya, sumber daya ini mungkin dilepaskan secara perlahan, meningkatkan beban pada instans Hologres Anda.

Dalam kasus ekstrem, fallback yang sering dapat memengaruhi layanan penting lain yang bergantung pada instans Hologres yang sama. Untuk mencegah hal ini, Anda dapat menonaktifkan mekanisme fallback otomatis dengan menambahkan parameter set odps.table.api.allow.fallback.jdbc=false; ke pekerjaan Anda. Ini menyebabkan pekerjaan gagal alih-alih diam-diam kembali, yang mencegah degradasi kinerja tak terduga.

Penurunan predikat untuk tabel eksternal Hologres

Ketika Anda mengkueri tabel eksternal Hologres di MaxCompute, Anda dapat menurunkan kondisi filter kueri ke Hologres. Teknik ini, yang dikenal sebagai penurunan predikat (PPD), memfilter data di sumber, yang mengurangi jumlah data yang ditransfer dan meningkatkan kinerja kueri. Penurunan predikat sangat efektif dalam skenario berikut:

  • Kueri dengan kondisi filter selektif yang memfilter sejumlah besar data.

  • Kueri pada tabel partisi logis.

Catatan

Skenario

Deskripsi

Parameter inti

Nilai yang valid untuk parameter predicate_pushdown_mode:

  • off: Menonaktifkan penurunan predikat dan membaca semua data. Anda dapat menggunakan pengaturan ini untuk debugging dan perbandingan di lingkungan pengembangan.

  • on: Mengaktifkan penurunan predikat untuk membuat hanya snapshot yang difilter. Direkomendasikan untuk lingkungan produksi.

  • Debug: Membuat dua snapshot untuk membandingkan kinerja. Ini dapat digunakan untuk pengujian kinerja dan troubleshooting.

Sintaks contoh:

set odps.external.holo.read.table.rules="{predicate_pushdown_mode:on}";

Tipe yang didukung

INT, BIGINT, STRING, DATE, TIMESTAMP, BINARY

Batasan

  • Penurunan predikat tidak mendukung fungsi yang ditentukan pengguna (UDF) atau fungsi bawaan.

  • Melepas ekspresi CAST selama konversi implisit saat ini tidak didukung.

  • Tipe holob saat ini tidak didukung.

  • Anda tidak dapat menggunakan penurunan predikat dengan tabel primary key di Hologres.

Skenario Penerapan

  • Instans Hologres yang mendukung PPD.

Contoh

  1. Siapkan data. Di instans Hologres Anda, buat tabel uji dan masukkan data.

    CREATE TABLE test_multi_type_ppd (
      c_id INT NOT NULL,
      c_boolean BOOLEAN,
      c_int INT,
      c_bigint BIGINT,
      c_double DOUBLE precision,
      c_float REAL,
      c_string TEXT,
      c_date DATE,
      c_timestamp_tz TIMESTAMPTZ,
      c_timestamp_ntz TIMESTAMP
    )
    WITH (SEGMENT_KEY = 'c_id');
    -- Masukkan 10 baris data.
    INSERT INTO test_multi_type_ppd VALUES
    (1,  true,   10,  1000,   1.25,  1.5,  'alpha',   '2023-01-01', '2023-01-01 10:00:00+08', '2023-01-01 02:00:00'),
    (2,  false,  20,  2000,  -2.50,  2.5,  'beta',    '2023-01-02', '2023-01-02 10:00:00+08', '2023-01-02 02:00:00'),
    (3,  true,   30,  3000,   3.75, -3.5,  'gamma',   '2023-01-03', '2023-01-03 10:00:00+08', '2023-01-03 02:00:00'),
    (4,  false,  40,  4000,   4.00,  4.5,  'delta',   '2023-01-04', '2023-01-04 10:00:00+08', '2023-01-04 02:00:00'),
    (5,  true,   50,  5000,   5.50,  5.5,  'epsilon', '2023-01-05', '2023-01-05 10:00:00+08', '2023-01-05 02:00:00'),
    (6,  false,  60,  6000,   6.60,  6.0,  'zeta',    '2023-01-06', '2023-01-06 10:00:00+08', '2023-01-06 02:00:00'),
    (7,  true,   70,  7000,   7.70, -7.0,  'eta',     '2023-01-07', '2023-01-07 10:00:00+08', '2023-01-07 02:00:00'),
    (8,  false,  80,  8000,   8.80,  8.0,  'theta',   '2023-01-08', '2023-01-08 10:00:00+08', '2023-01-08 02:00:00'),
    (9,  true,   90,  9000,  -9.90,  9.0,  'iota',    '2023-01-09', '2023-01-09 10:00:00+08', '2023-01-09 02:00:00'),
    (10, false, 100, 10000,  10.10, 10.0,  'kappa',   '2023-01-10', '2023-01-10 10:00:00+08', '2023-01-10 02:00:00');
    SELECT * FROM test_multi_type_ppd;
  2. Buat tabel eksternal Hologres di MaxCompute.

    CREATE EXTERNAL TABLE test_multi_type_ppd
    (
      c_id int,
      c_boolean boolean,
      c_int int,
      c_bigint bigint,
      c_double double,
      c_float float,
      c_string string,
      c_date date,
      c_timestamp_tz timestamp,
      c_timestamp_ntz timestamp_ntz
    )
    STORED BY 'com.aliyun.odps.jdbc.JdbcStorageHandler'
    LOCATION 'jdbc:postgresql://<holo-endpoint>/<db>?currentSchema=public&table=test_multi_type_ppd'
    TBLPROPERTIES (
      'mcfed.mapreduce.jdbc.driver.class'='org.postgresql.Driver',
      'odps.federation.jdbc.target.db.type'='holo'
    );
  3. Kueri tabel eksternal.

    -- Aktifkan baca langsung Hologres.
    SET odps.table.api.enable.holo.table=true;
    -- Atur mode PPD (off, on, atau debug).
    SET odps.external.holo.read.table.rules="{predicate_pushdown_mode:on}";
    -- Konfigurasi sistem tipe.
    SET odps.sql.type.system.odps2=true;
    SET odps.sql.decimal.odps2=true;
    -- Izinkan ekspresi diturunkan ke TableScan. Ini biasanya diaktifkan secara default.
    SET odps.use.builtin.function.input.range=true;
    -- set odps.mcqa.disable=true;
    SELECT * FROM test_multi_type_ppd WHERE c_id = 3;
    -- Kueri mengembalikan hasil berikut.
    +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+
    | c_id | c_boolean | c_int | c_bigint   | c_double   | c_float | c_string | c_date | c_timestamp_tz | c_timestamp_ntz |
    +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+
    | 3    | true      | 30    | 3000       | 3.75       | -3.5    | gamma    | 2023-01-03 | 2023-01-03 10:00:00 | 2023-01-03 02:00:00 |
    +------+-----------+-------+------------+------------+---------+----------+--------+----------------+-----------------+
    -- Periksa bagian Summary di Logview. Informasi berikut ditampilkan:
    external holo tables:
    	**.default.test_multi_type_ppd:Optimized
      Holo-side PPD enabled -->   Filter pushdown applied successfully
      Snapshot Id: 56-1-100***
      With-filter file count: 2
      With-filter create snapshot duration: 19ms

Impor dan ekspor data Hologres

  • Untuk mengimpor data dari Hologres ke tabel atau partisi MaxCompute, gunakan LOAD.

  • Untuk mengekspor data dari proyek MaxCompute ke Hologres untuk digunakan oleh mesin komputasi lain, gunakan UNLOAD.

Tipe data yang didukung

  • Batasan tipe desimal

    Untuk tabel eksternal Hologres yang dibuat di MaxCompute, tipe data DECIMAL tetap pada decimal(38,18) dan tidak dapat dimodifikasi. Jika tabel sumber memiliki tempat desimal lebih sedikit, Anda dapat mendefinisikan kolom sebagai tipe STRING di tabel eksternal MaxCompute dan kemudian menggunakan fungsi CAST untuk secara eksplisit mengonversi data saat menggunakannya.

  • Batasan tipe kompleks

    Tabel eksternal Hologres yang dibuat di MaxCompute tidak mendukung tipe data kompleks seperti Array, Map, atau Struct.

  • Tipe lain yang tidak kompatibel

    Tipe data di Hologres, seperti MONEY, tidak didukung karena tidak ada tipe data yang sesuai di MaxCompute.

Tabel berikut mencantumkan pemetaan tipe data antara Hologres dan MaxCompute.

Tipe Hologres

Tipe MaxCompute

Baca JDBC

Tulis JDBC

Baca langsung (odps.table.api.enable.holo.table=true)

Deskripsi

INTEGER (alias: INT atau INT4)

INT

Didukung

Didukung

Didukung

Bilangan bulat bertanda 32-bit.

TEXT

STRING, VARCHAR

Didukung

Didukung

Didukung

Tipe string dengan batas panjang 8 MB.

SMALLINT

SMALLINT

Didukung

Didukung

Didukung

Bilangan bulat bertanda 16-bit.

INT2

SMALLINT

Didukung

Didukung

Didukung

Bilangan bulat bertanda 16-bit.

BIGINT (alias: INT8)

BIGINT

Didukung

Didukung

Didukung

Bilangan bulat bertanda 64-bit.

BYTEA

BINARY

Didukung

Didukung

Didukung

Tipe data biner saat ini memiliki batas panjang 8 MB. Tipe data BINARY Hologres memiliki ukuran maksimum 1 GB.

REAL (alias: FLOAT4)

FLOAT

Didukung

Didukung

Didukung

Bilangan titik mengambang biner 32-bit.

DOUBLE PRECISION (alias: FLOAT8)

DOUBLE

Didukung

Didukung

Didukung

Bilangan titik mengambang biner 64-bit.

BOOLEAN (alias: BOOL)

BOOLEAN

Didukung

Didukung

Didukung

Tipe BOOLEAN.

TIMESTAMP

TIMESTAMP_NTZ

Didukung

Tidak didukung

Didukung

Tipe TIMESTAMP Hologres memiliki presisi mikrodetik dan tidak memiliki zona waktu.

Tipe ini dipetakan ke TIMESTAMP_NTZ MaxCompute, yang memiliki presisi nanodetik. Perbedaan presisi ini dapat menyebabkan ketidaksesuaian.

TIMESTAMP WITH TIME ZONE (alias: TIMESTAMPTZ)

TIMESTAMP

Didukung

Tidak didukung

Didukung

Tipe data timestamp akurat hingga nanodetik dan menggunakan format yyyy-mm-dd hh:mm:ss.xxxxxxxxx.

Konversi presisi dasar ditangani secara otomatis.

DECIMAL (alias: NUMERIC)

DECIMAL(precision,scale)

Didukung

Didukung

Didukung

Tipe numerik eksak basis-10.

  • precision: Menentukan jumlah digit maksimum. Rentang nilai: 1 <= precision <= 38.

  • scale: Menentukan jumlah tempat desimal. Rentang nilai: 0 <= scale <= 18.

Di MaxCompute, tipe data DECIMAL default ke (38,18) jika presisi tidak ditentukan. Saat Anda membuat tabel menggunakan pernyataan IMPORT FOREIGN SCHEMA, sistem secara otomatis mengonversi presisi.

CHAR(n)

CHAR(n)

Didukung

Didukung

Didukung

Di MaxCompute, CHAR(n) adalah tipe karakter panjang tetap. n menentukan panjangnya. Panjang maksimum adalah 255. String yang lebih pendek diisi dengan spasi.

Ukuran maksimum tipe data CHAR(n) di Hologres adalah 1 GB.

VARCHAR(n)

VARCHAR(n)

Didukung

Didukung

Didukung

Tipe data VARCHAR(n) di MaxCompute adalah tipe karakter panjang variabel. Parameter n menentukan panjangnya, yang berkisar dari 1 hingga 65535.

Di Hologres, ukuran maksimum untuk VARCHAR(n) adalah 1 GB.

DATE

DATE

Didukung

Didukung

Didukung

Tipe data tanggal dalam format yyyy-mm-dd.

INT4[]

ARRAY<INT>

Didukung

Tidak didukung

Didukung

Array Hologres dipetakan ke tipe ARRAY MaxCompute yang sesuai. Perhatikan bahwa penulisan array ke Hologres tidak didukung melalui JDBC.

INT8[]

ARRAY<BIGINT>

Didukung

Tidak didukung

Didukung

FLOAT4[]

ARRAY<FLOAT>

Didukung

Tidak didukung

Didukung

FLOAT8[]

ARRAY<DOUBLE>

Didukung

Tidak didukung

Didukung

BOOLEAN[]

ARRAY<BOOLEAN>

Didukung

Tidak didukung

Didukung

TEXT[]

ARRAY<STRING>

Didukung

Tidak didukung

Didukung

JSONB

JSON

Tidak didukung

Tidak didukung

Didukung

JSONB Hologres dipetakan ke tipe JSON MaxCompute. Pemetaan ini hanya didukung dalam mode baca langsung.

JSON

STRING

Didukung

Tidak didukung

Tidak didukung

Saat menggunakan JDBC, tipe JSON Hologres dipetakan ke tipe STRING MaxCompute, yang membatasi ukurannya hingga 8 MB.

SERIAL (auto-increment)

INT

Didukung

Tidak didukung

Didukung

MaxCompute membaca field SERIAL Hologres sebagai nilai INT. Perilaku auto-increment tidak didukung saat menulis.

RoaringBitmap

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

RoaringBitmap64

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

BIT(n)

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

VARBIT(n)

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

INTERVAL

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

TIMETZ

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

TIME

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

INET

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

MONEY

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

OID

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

UUID

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe yang sesuai di MaxCompute.

FAQ

Kesalahan ODPS-0130071 saat membaca langsung data Hologres

  • Masalah

    Saat membaca data dari Hologres dalam mode baca langsung, pekerjaan gagal dengan kesalahan serupa ODPS-0130071 Failed to split to equal size...max count: 7777. Contohnya:

    ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: storage/table/src/input_splits_builder.cpp(195): StorageException: Failed to split to equal size, total size: 2143570729934, min size: 268435456, max size: 272629760, max count: 7777, split size: 275629513, split count: 7777
  • Penyebab

    Saat MaxCompute membaca data dari Hologres, strategi pemisahan data defaultnya dapat menyebabkan jumlah instans mapper melebihi batas konkurensi 7.777.

    Catatan

    Batas ini mencegah pekerjaan dengan jumlah mapper berlebihan berjalan, yang melindungi stabilitas file dan koneksi jaringan Hologres.

  • Solusi

    Anda dapat mengatasi kesalahan ini dengan mengatur parameter berikut.

    SET odps.external.holo.mapper.instances=10000; -- Tingkatkan batas konkurensi. Nilai maksimum adalah 10.000.
    SET odps.sql.mapper.split.size=512; -- Sesuaikan konkurensi pekerjaan. Nilai maksimum adalah 512 MB.

Pekerjaan SQL lambat pada tabel eksternal Hologres

  • Masalah

    Kinerja lambat saat Anda menggunakan SDK untuk mencari data di tabel eksternal MaxCompute.

  • Solusi

    Tabel eksternal berkinerja lambat karena hanya mendukung pemindaian tabel penuh. Untuk kinerja yang lebih baik, gunakan tabel internal MaxCompute sebagai gantinya.

Kesalahan saat nama kolom adalah kata kunci

  • Masalah

    Jika nama kolom di tabel Hologres Anda adalah kata kunci, kueri mungkin gagal dengan kesalahan berikut tanpa konfigurasi khusus:

    ODPS-0123131:User defined function exception - SQLException in nextKeyValue

    Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near ","

  • Solusi

    Tambahkan parameter odps.federation.jdbc.colmapping untuk memetakan kolom tabel sumber Hologres ke kolom tabel eksternal Hologres.

    Sebagai contoh, jika tabel sumber Hologres berisi kata kunci "offset" sebagai nama kolom, tambahkan parameter 'odps.federation.jdbc.colmapping'='offset:"offset"' saat membuat tabel eksternal Hologres.

Kesalahan password authentication failed for user "mcslr$STS.******" dalam mode double-signature

  • Masalah

    Saat pengguna RAM atau peran RAM membaca tabel eksternal Hologres menggunakan mode otorisasi peran terkait layanan (mode double-signature), pekerjaan mungkin gagal dengan kesalahan password authentication failed for user "mcslr$STS.******". Berikut contoh pesan kesalahan:

    ODPS-0130071:[0,0] Semantic analysis exception - physical plan generation failed: splitByCommonTable() failed, dataSourceId=[TableScan1], tableId=[*****.*****], location=[jdbc:postgresql://hgpostcn-cn-*****-cn-beijing-internal.hologres.aliyuncs.com:80/*****?ApplicationName=MaxCompute&currentSchema=public&useSSL=false&table=*****/], rootCause -> common/table/jni/utils/jni_helper.cpp(126): UnretryableException: Common table io jni exception - ExceptionType: com.aliyun.odps.hive.wrapper.thrift.RequestException
    Message: null
    StackTrace:
    RequestException(reason:java.lang.RuntimeException: java.lang.RuntimeException: java.lang.RuntimeException: org.postgresql.util.PSQLException: FATAL: password authentication failed for user "mcslr$STS.*********"
  • Solusi

    Kesalahan ini menunjukkan bahwa pengguna tidak memiliki izin baca yang diperlukan untuk tabel di Hologres. Untuk mengatasi ini, login ke konsol Hologres dengan Akun Alibaba Cloud Anda atau akun administrator. Di konsol, buka Pusat Keamanan, tambahkan pengguna ke Manajemen Pengguna, dan berikan izin database yang diperlukan.

Kesalahan Holo-side PPD disabled --> The Holo snapshot PPD mode is enabled, but FAILED to push down the filter into Holo dalam mode baca langsung

  • Pesan kesalahan

    Holo-side PPD disabled --> The Holo snapshot PPD mode is enabled, 
    but FAILED to push down the filter into Holo, 
    errorMsg[storage/table/src/holo/snapshot.cpp(319): 
    StorageException: Create/Get snapshot failed for table: test_multi_type_ppd partition:  
    Query:select holo_create_table_snapshot('public.test_multi_type_ppd', 259200, filter=>$$c_id = 3$$) with error ERROR:  
    internal error: Failed to build fragment dag desc: node type 65 is not supported
  • Solusi

    Pastikan tabel internal Hologres Anda memenuhi persyaratan di Catatan penggunaan.

Referensi

Untuk informasi selengkapnya tentang masalah umum dengan tabel asing Hologres, lihat FAQ Lakehouse dan Tabel Asing.