全部产品
Search
文档中心

MaxCompute:Tabel eksternal Hologres

更新时间:Feb 07, 2026

Topik ini menjelaskan cara membuat tabel eksternal Hologres, menentukan sumber data Hologres, mengonfigurasi informasi autentikasi STS atau mengaktifkan double signature, memetakan tabel tujuan, serta menyediakan detail driver Java Database Connectivity (JDBC) dalam pernyataan CREATE EXTERNAL TABLE.

Pendahuluan

Hologres adalah gudang data analitik interaktif real-time yang kompatibel dengan protokol PostgreSQL dan terintegrasi secara mulus dengan MaxCompute di lapisan penyimpanan. Anda dapat membuat tabel eksternal Hologres di MaxCompute untuk mengkueri data dari sumber data Hologres menggunakan driver JDBC PostgreSQL dan informasi autentikasi STS. Metode ini menghindari penyimpanan berlebih serta menghilangkan kebutuhan impor atau ekspor data, sehingga menghasilkan kueri yang cepat.

Penerapan

  • Operasi Data Manipulation Language (DML)

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

    • Operasi INSERT OVERWRITE tidak didukung untuk tabel eksternal Hologres.

      Untuk menimpa data dari MaxCompute ke Hologres, baca tabel eksternal yang memetakan tabel MaxCompute dari Hologres dan gunakan semantik INSERT OVERWRITE Hologres. Untuk informasi selengkapnya, lihat INSERT OVERWRITE.

  • Risiko penulisan data

    Saat menulis volume data besar ke tabel eksternal Hologres, penulisan paralel lintas beberapa proses kadang-kadang dapat menyebabkan penulisan ulang data, sehingga menghasilkan duplikasi.

  • Partisi

    Tabel partisi di Hologres tidak berkorespondensi dengan tabel partisi di MaxCompute. Tabel eksternal Hologres tidak mendukung partisi. Namun, dalam mode baca langsung, jika Anda mengkueri tabel eksternal Hologres yang dipetakan ke tabel induk partisi di Hologres, pemangkasan partisi berlaku ketika kondisi kueri sesuai dengan kolom kunci partisi tabel anak.

  • Tabel eksternal Hologres tidak mendukung properti cluster.

  • Tabel eksternal Hologres tidak dapat dipetakan ke Dynamic Tables di Hologres.

  • Tipe data yang didukung.

Buat tabel eksternal Hologres

Buat tabel eksternal Hologres dalam mode STS atau mode double-signature.

Catatan

Aturan pembuatan tabel eksternal

  • Jika Anda mengaktifkan daftar putih alamat IP untuk Hologres, Anda harus membuat tabel eksternal Hologres dalam mode double-signature. Jika dibuat dalam mode STS, akses MaxCompute ke Hologres akan diblokir oleh daftar putih alamat IP.

  • Untuk tabel induk dan anak di Hologres, nama tabel ditentukan dalam tabel eksternal Hologres dan pernyataan SQL dieksekusi. Baik tabel induk maupun anak dapat dipetakan ke tabel eksternal Hologres, tetapi tabel induk bersifat read-only.

  • Saat menulis data ke tabel eksternal Hologres, mekanisme INSERT ON CONFLICT (UPSERT) Hologres tidak didukung. Jika tabel sumber Hologres memiliki primary key, pastikan data yang Anda tulis tidak melanggar batasan keunikan primary key di tabel sumber.

  • Nama tabel dan bidang tidak peka huruf besar/kecil. Anda tidak dapat memaksa konversi huruf besar/kecil saat membuat, mengkueri, atau mereferensikan tabel dan bidang.

Kompatibilitas skema

Jika skema tabel sumber Hologres berbeda dengan skema tabel eksternal:

  • Jumlah kolom tidak konsisten: Jika tabel sumber Hologres memiliki lebih sedikit kolom daripada pernyataan Data Definition Language (DDL) tabel eksternal, terjadi kesalahan saat membaca data dari Hologres, misalnya pesan kesalahan column "xxx" does not exist. Jika tabel sumber Hologres memiliki lebih banyak kolom daripada pernyataan DDL, kolom tambahan tersebut diabaikan.

  • Tipe kolom tidak konsisten: MaxCompute tidak mendukung penggunaan tipe INT untuk menerima data STRING dari tabel sumber Hologres. Anda dapat menggunakan tipe STRING untuk menerima data INT, tetapi hal ini tidak disarankan.

Sintaks

Saat membuat tabel eksternal, Anda harus menentukan StorageHandler, mengonfigurasi informasi autentikasi STS atau mengaktifkan double signature, serta menentukan titik akhir JDBC dalam pernyataan DDL CREATE EXTERNAL TABLE untuk mengakses sumber data Hologres.

Buat tabel eksternal Hologres dalam mode STS

Untuk contoh kode, lihat Buat tabel eksternal Hologres (mode STS).

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>,...'
);

Buat tabel eksternal Hologres dalam mode double-signature

Untuk contoh kode, lihat Buat tabel eksternal Hologres (mode double-signature).

Tabel eksternal Hologres yang dibuat dalam mode double-signature memungkinkan RAM user yang sama mengakses tabel yang diotorisasi di MaxCompute dan Hologres tanpa otorisasi manual. Mode ini juga mendukung fitur daftar putih alamat IP Hologres.

-- Aktifkan mode double-signature.
SET odps.sql.common.table.planner.ext.hive.bridge=true;
-- 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

Parameter

Wajib

Deskripsi

odps.sql.common.table.planner.ext.hive.bridge

Ya

Menentukan apakah akan membuat tabel eksternal Hologres dalam mode double-signature. Tetapkan nilai ke true untuk mengaktifkan mode ini.

Tidak

Anda tidak perlu menentukan parameter ini jika membuat tabel eksternal Hologres dalam mode STS.

IF NOT EXISTS

Tidak

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

  • Jika Anda menentukan IF NOT EXISTS, pesan sukses dikembalikan terlepas dari apakah tabel dengan nama yang sama sudah ada. Hal ini berlaku bahkan jika skema tabel yang ada berbeda dari skema tabel yang ingin Anda buat. Metadata tabel yang ada tidak diubah.

table_name

Ya

Nama tabel eksternal Hologres yang akan dibuat di MaxCompute.

col_name

Ya

Nama kolom dalam tabel eksternal Hologres.

data_type

Ya

Tipe data kolom dalam tabel eksternal Hologres.

STORED BY

Ya

Menentukan StorageHandler, yang mendefinisikan cara mengkueri tabel eksternal Hologres.

Nilainya tetap com.aliyun.odps.jdbc.JdbcStorageHandler, yang menentukan metode koneksi JdbcStorageHandler.

ram_arn

Ya

Diperlukan saat membuat tabel eksternal Hologres dalam mode STS. Menentukan Nama Sumber Daya Alibaba Cloud (ARN) dari peran RAM untuk autentikasi STS saat membuat tabel eksternal. Untuk informasi tentang cara membuat dan memberikan izin kepada peran RAM, lihat Otorisasi peran RAM reguler dalam mode STS untuk Hologres.

  1. Masuk ke Konsol Resource Access Management (RAM).

  2. Di panel navigasi sebelah kiri, pilih Identities > Roles.

  3. Di halaman Roles, klik Role Name yang dituju untuk membuka halaman detailnya.

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

Tidak

Anda tidak perlu menentukan parameter ini jika membuat tabel eksternal Hologres dalam mode double-signature.

LOCATION

Ya

Titik akhir JDBC instans Hologres. Titik akhir berisi parameter berikut:

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

    Penting

    Saat ini, Anda hanya dapat mengakses Hologres menggunakan nama domain jaringan klasik. Akses melalui nama domain VPC tidak didukung.

  • port: Wajib. Port jaringan instans Hologres.

    1. Masuk ke Konsol Manajemen Hologres, lalu di pojok kiri atas, pilih wilayah.

    2. Di panel navigasi sebelah kiri, pilih Instances.

      Di halaman Instances, klik nama instans yang dituju.

  • database: Wajib. Nama database Hologres yang akan dihubungkan. Untuk informasi selengkapnya tentang database Hologres, lihat CREATE DATABASE.

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

  • schema: Opsional. Anda tidak perlu mengonfigurasi properti ini jika nama tabel unik dalam database Hologres atau jika tabel sumber berada dalam skema default. Untuk informasi selengkapnya tentang skema, lihat CREATE SCHEMA.

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

tblproperties

Ya

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

    Driver untuk menghubungkan ke database Hologres. Nilainya tetap org.postgresql.Driver.

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

    Jenis database yang akan dihubungkan. Nilainya tetap holo.

  • odps.federation.jdbc.colmapping: Opsional.

    Jika Anda ingin memetakan beberapa kolom sumber data ke tabel eksternal Hologres, Anda harus mengonfigurasi parameter ini untuk menentukan pemetaan antara bidang tabel sumber Hologres dan bidang tabel eksternal Hologres.

    • Jika parameter ini tidak dikonfigurasi, bidang tabel sumber dipetakan ke kolom dengan nama yang sama di tabel eksternal Hologres.

    • Jika parameter ini dikonfigurasi tetapi Anda hanya menentukan pemetaan untuk beberapa kolom tabel eksternal Hologres, bidang tabel sumber dipetakan ke kolom dengan nama yang sama di tabel eksternal Hologres. Kesalahan dilaporkan untuk kolom lain yang tidak ditentukan jika nama atau tipenya tidak cocok.

    • Jika parameter ini dikonfigurasi dan nama bidang di Hologres mengandung huruf kapital, Anda harus membungkus nama bidang Hologres dengan tanda kutip ganda (""). Format: Bidang MaxCompute 1 : "Bidang Hologres 1"[ ,Bidang MaxCompute 2 : "Bidang Hologres 2" ,...].

      Catatan

      Bidang tabel sumber Hologres adalah c bool, map_B string, a bigint. Bidang tabel eksternal Hologres adalah a bigint, x string, c bool.

      Jika Anda menyetel colmapping ke 'x: "map_B"', pemetaan berhasil dan Anda dapat mengkueri data dari Hologres.

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

    Membaca data dari tabel sumber Hologres. Kolom dan nama kolom tabel eksternal harus sama dengan kolom, nama kolom, dan tipe data tabel sumber Hologres yang dikueri secara langsung. Jika menggunakan alias, alias harus konsisten. Format select_sentence adalah SELECT xxx FROM <holo_database_name>.<holo_schema_name>.<holo_table_name>.

Contoh

Persiapkan data

Jika Anda sudah memiliki database Hologres, tabel Hologres, dan data uji, lewati langkah ini.

Buat database Hologres

  1. Masuk ke Konsol Manajemen Hologres, lalu di pojok kiri atas, pilih wilayah.

  2. Di panel navigasi sebelah kiri, pilih Instances.

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

    Di halaman Instances, klik nama instans yang dituju.

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

  5. Klik tab Metadata Management di atas.

    Klik Create Database. Pada kotak dialog yang muncul, masukkan Database Name dan biarkan pengaturan parameter lainnya tetap pada nilai default.

Buat tabel Hologres

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

  2. Klik tab SQL Editor di atas.

  3. Masukkan pernyataan berikut:

    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;

Buat tabel eksternal Hologres (mode STS)

Hologres tidak mendukung penambahan peran RAM dari Akun Alibaba Cloud lain ke instans database. Oleh karena itu, mode STS untuk otorisasi peran reguler di Hologres hanya mendukung peran RAM yang berasal dari akun yang sama. Demikian pula, saat MaxCompute mengakses tabel eksternal atau skema eksternal Hologres, hanya peran RAM dari akun yang sama yang didukung.

Prasyarat

  1. Instal dan konfigurasikan klien MaxCompute.

  2. Persiapkan proyek MaxCompute untuk membuat tabel eksternal Hologres.

    Untuk informasi selengkapnya tentang cara membuat proyek MaxCompute, lihat Buat proyek MaxCompute.

  3. Untuk informasi tentang cara membuat dan memberikan izin kepada peran RAM, lihat Otorisasi peran RAM reguler dalam mode STS untuk Hologres.

Buat tabel eksternal di MaxCompute

  1. Masuk ke klien MaxCompute dan masukkan proyek MaxCompute tujuan.

  2. Jalankan perintah berikut untuk membuat tabel eksternal Hologres.

    Informasi instans Hologres berikut didasarkan pada langkah-langkah di bagian Persiapkan data:

    • Nama database Hologres: holo_external_test.

    • Skema database Hologres: public.

    • Nama tabel Hologres: holo.

    • Titik akhir jaringan klasik database 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 Hologres baru.

    -- Properti berikut harus ditambahkan 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 mode baca langsung JDBC. 
    -- Kueri data dari tabel eksternal Hologres.
    SELECT * FROM my_table_holo_jdbc limit 10;
    -- Hasil berikut dikembalikan.
    +------------+------------+
    | id         | name       | 
    +------------+------------+
    | 9          | hanmeimei  | 
    | 4          | tom        | 
    | 7          | haward     | 
    | 2          | mary       | 
    | 5          | lulu       | 
    | 8          | lilei      | 
    | 10         | lily       | 
    | 1          | kate       | 
    | 6          | mark       | 
    | 11         | lucy       | 
    +------------+------------+
  4. Tukar data dan lakukan analisis join dengan Hologres menggunakan tabel eksternal Hologres.

    • Gunakan tabel eksternal Hologres untuk menulis data yang diproses MaxCompute ke Hologres guna percepatan analisis dan layanan online. Perintah contoh berikut disediakan.

      -- Properti berikut harus ditambahkan 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 mode 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;
      -- Hasil berikut dikembalikan.
      +------------+------------+
      | 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 memenuhi persyaratan pembaruan dinamis real-time. MaxCompute mengakses tabel dimensi ini menggunakan tabel eksternal dan melakukan analisis join dengan tabel fakta di MaxCompute. Perintah contoh berikut disediakan.

      -- Properti berikut harus ditambahkan 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;
      -- Lakukan analisis join pada tabel internal MaxCompute dan tabel eksternal Hologres.
      SELECT * FROM my_table_holo_jdbc t1 INNER JOIN holo_test t2 ON t1.id=t2.id;
      -- Hasil berikut dikembalikan.
      +------------+------------+------------+------------+
      | 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        | 
      +------------+------------+------------+------------+

Buat tabel eksternal Hologres (mode double-signature)

Double signature adalah protokol autentikasi dan otorisasi yang dikembangkan bersama oleh MaxCompute dan Hologres. Saat menggunakan mode ini, MaxCompute menandatangani informasi log masuk akun Anda dan meneruskan data autentikasi ke Hologres. Hologres kemudian mengotentikasi dan mengotorisasi akun yang sama berdasarkan protokol yang disepakati dengan MaxCompute. Akibatnya, Anda dapat menggunakan akun yang sama di MaxCompute dan Hologres untuk langsung mengakses tabel eksternal tanpa mengonfigurasi informasi autentikasi tambahan.

Prasyarat

  1. Instal dan konfigurasikan klien MaxCompute.

  2. Persiapkan proyek MaxCompute untuk membuat tabel eksternal Hologres.

    Untuk informasi selengkapnya tentang cara membuat proyek MaxCompute, lihat Buat proyek MaxCompute.

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

  4. Hanya Hologres V1.3 dan versi setelahnya yang mendukung pembuatan tabel eksternal Hologres dalam mode double-signature dari MaxCompute. Saat ini, mode ini hanya mendukung pembacaan data dari tabel eksternal Hologres. Penulisan data ke tabel eksternal Hologres tidak didukung.

Buat tabel eksternal di MaxCompute

  1. Masuk ke klien MaxCompute dan masukkan proyek MaxCompute tujuan.

  2. Jalankan perintah berikut untuk membuat tabel eksternal Hologres.

    Informasi instans Hologres berikut didasarkan pada langkah-langkah di bagian Persiapkan data:

    • Nama database Hologres: holo_external_test.

    • Skema database Hologres: public.

    • Nama tabel Hologres: holo.

    • Titik akhir jaringan klasik database 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&preferQueryMode=simple&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.

    -- Kueri tabel eksternal. Perintah ini harus dijalankan bersamaan dengan perintah yang mengaktifkan mode double-signature.
    SET odps.sql.common.table.planner.ext.hive.bridge=true;
    SELECT * FROM holo_mc_external_dbl;
    
    -- Hasil berikut dikembalikan.
    +------------+------------+
    | 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 pembacaan langsung tabel eksternal Hologres dari penyimpanan

MaxCompute membaca data dari tabel eksternal Hologres dalam mode JDBC. Versi saat ini mendukung pembacaan langsung data dari lapisan penyimpanan Hologres, yang memberikan manfaat berikut:

  • Mengurangi latensi pembacaan tabel secara signifikan dan meningkatkan kecepatan kueri data.

  • Mengurangi jumlah koneksi ke node frontend (FE) Hologres secara signifikan. Sebagian besar kueri hanya memerlukan satu koneksi.

Batasan

Saat Anda mengaktifkan pembacaan langsung untuk Hologres, batasan berikut berlaku. Jika salah satu kondisi tidak terpenuhi, sistem akan kembali ke mode JDBC.

  1. Persyaratan versi

    Instans Hologres Anda harus V1.3.34 atau lebih baru. Versi sebelumnya tidak mendukung pembacaan langsung.

  2. Batasan jenis tabel

    • Pembacaan langsung tabel penyimpanan dingin Hologres tidak didukung.

    • Pembacaan langsung tabel berorientasi baris Hologres tidak didukung.

  3. Batasan pemetaan tipe data

    Saat menggunakan mode pembacaan langsung MaxCompute, kesalahan waktu minor dapat terjadi saat memetakan tipe Hologres TIMESTAMP WITH TIME ZONE ke tipe TIMESTAMP. Perbedaannya sebagai berikut:

    • Kesalahan nilai waktu

      • Jika waktu dalam kolom TIMESTAMP WITH TIME ZONE di Hologres lebih awal dari 1900-12-31 15:54:15, waktu yang dikueri oleh MaxCompute akan terlambat 5 menit 44 detik.

      • Jika waktu dalam kolom TIMESTAMP WITH TIME ZONE di Hologres antara 1900-12-31 15:54:16 dan 1969-12-31 23:59:58, waktu yang dikueri oleh MaxCompute 1 detik lebih lambat.

      • Jika waktu dalam kolom TIMESTAMP WITH TIME ZONE di Hologres lebih baru dari 1969-12-31 23:59:59, waktu yang dikueri oleh MaxCompute sesuai dengan waktu di Hologres.

    • Offset zona waktu

      • Jika MaxCompute menggunakan UTC+8 dan waktu dalam kolom TIMESTAMP WITH TIME ZONE di Hologres adalah 2000-01-01 00:00:00, waktu yang dikueri oleh MaxCompute adalah 2000-01-01 08:00:00.

      • Jika MaxCompute menggunakan UTC+8 dan waktu dalam kolom TIMESTAMP WITH TIME ZONE di Hologres adalah 1969-01-01 00:00:00, waktu yang dikueri oleh MaxCompute adalah 1969-01-01 08:00:01.

  4. Batasan wilayah yang sama

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

  5. Jika Hologres dikonfigurasi dengan arsitektur master-slave, Anda hanya dapat menggunakan URL koneksi instans utama. URL koneksi untuk instans slave tidak didukung.

  6. Batasan tambahan untuk mode Foreign Server: Saklar sintaks tingkat skema harus diaktifkan untuk proyek MaxCompute.

Aktifkan fitur

Tambahkan parameter berikut sebelum pernyataan SQL saat mengkueri tabel eksternal Hologres di MaxCompute.

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

Tetapkan saklar pembacaan langsung tingkat proyek.

-- Anda dapat mengaktifkan mode pembacaan langsung dan menonaktifkan fallback ke mode JDBC di tingkat proyek.
-- Aktifkan mode pembacaan langsung di tingkat proyek: 
setproject odps.table.api.enable.holo.table=true; -- true: aktifkan, false: nonaktifkan

-- Nonaktifkan fallback default ke mode JDBC: 
setproject odps.table.api.allow.fallback.jdbc=false; -- true: fallback, false: jangan fallback

Verifikasi mode pembacaan langsung

Anda dapat melihat log di Logview untuk memeriksa apakah kueri berjalan dalam mode pembacaan langsung. Untuk informasi selengkapnya tentang cara menggunakan Logview, lihat Gunakan Logview V2.0 untuk melihat informasi pekerjaan.

Di tab Summary Logview, temukan bidang external holo tables untuk melihat propertinya. Formatnya sebagai berikut:

<project_name>.<table_name>:<Access mode>[<(Fallback reason)>]

Deskripsi parameter:

Parameter

Deskripsi

project_name

Nama proyek.

table_name

Nama tabel.

Access mode

Mode akses tabel eksternal. Nilai yang valid:

  • Optimized: Menunjukkan bahwa mode pembacaan langsung digunakan. Gambar berikut menunjukkan contoh Logview.直读模式

  • Fallback: Menunjukkan bahwa sistem kembali ke mode JDBC. Gambar berikut menunjukkan contoh Logview.回退为JDBC模式

Fallback reason

Jika Access mode adalah Fallback, parameter ini menunjukkan alasan sistem kembali ke mode JDBC. Tabel berikut menjelaskan nilai yang mungkin dan solusinya.

  • Column type map error Column name ${ColumnName}: Tipe kolom tabel MaxCompute dan tabel Hologres tidak cocok atau tidak kompatibel. Ubah tipe data tabel eksternal berdasarkan pemetaan tipe data untuk menggunakan mode pembacaan langsung.

  • Holo connection error: Koneksi instans Hologres tidak normal. Informasi izin mungkin salah atau status instans Hologres tidak normal. Periksa apakah pengguna saat ini memiliki izin untuk mengakses database Hologres yang sesuai atau apakah instans Hologres dalam keadaan aktif.

  • Odps table is partition table: Tabel eksternal Hologres yang dibuat di MaxCompute adalah tabel partisi. Hal ini tidak didukung.

  • Select hg_version error, Hologres version check error, atau Fetch hg_version data error: Versi instans Hologres salah. Tingkatkan instans Hologres ke V1.3.34 atau lebih baru. Untuk informasi selengkapnya tentang cara meningkatkan instans, lihat Tingkatkan instans.

Tugas yang berjalan dalam mode pembacaan langsung kadang-kadang dapat mencapai batas pembacaan langsung dan kembali ke mode JDBC. Jika beban kerja berat selama pembacaan langsung, fallback ke mode JDBC akan mengonsumsi banyak sumber daya kolam koneksi Hologres. Selain itu, efisiensi transmisi data dalam mode JDBC jauh lebih rendah daripada mode pembacaan langsung, dan sumber daya dilepaskan secara perlahan.

Pantau tekanan beban pada instans Hologres setelah fallback ke mode JDBC. Dalam kasus ekstrem, banyak pekerjaan fallback dapat memengaruhi layanan lain yang mengakses instans Hologres. Untuk mencegah hal ini, tambahkan parameter set odps.table.api.allow.fallback.jdbc=false; ke tugas pembacaan langsung untuk menonaktifkan fallback otomatis dan menghindari dampak tak terduga.

Impor dan ekspor data Hologres

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

  • Untuk mengekspor data dari proyek MaxCompute ke sistem penyimpanan eksternal seperti Hologres untuk digunakan oleh mesin komputasi lain, gunakan perintah UNLOAD.

Tipe data yang didukung

  • Batasan tipe DECIMAL:

    Untuk tabel eksternal Hologres yang dibuat di MaxCompute, tipe data DECIMAL tetap pada decimal(38,18) dan tidak dapat diubah. Jika tabel sumber memiliki tempat desimal lebih sedikit, definisikan kolom sebagai tipe STRING di tabel eksternal MaxCompute dan gunakan fungsi CAST untuk konversi saat diperlukan.

  • Batasan tipe kompleks:

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

  • Tipe tidak kompatibel lainnya:

    Tipe data di Hologres seperti MONEY tidak memiliki tipe data yang sesuai di MaxCompute dan tidak didukung.

Tabel berikut memberikan detail lebih lanjut.:

Tipe data Hologres

Tipe data MaxCompute

JDBC read

JDBC write

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

Deskripsi

INTEGER (alias: INT atau INT4)

INT

Didukung

Didukung

Didukung

Integer bertanda 32-bit.

TEXT

STRING, VARCHAR

Didukung

Didukung

Didukung

Tipe string. Batas panjang saat ini adalah 8 MB.

SMALLINT

SMALLINT

Didukung

Didukung

Didukung

Integer bertanda 16-bit.

INT2

SMALLINT

Didukung

Didukung

Didukung

Integer bertanda 16-bit.

BIGINT (alias: INT8)

BIGINT

Didukung

Didukung

Didukung

Integer bertanda 64-bit.

BYTEA

BINARY

Didukung

Didukung

Didukung

Tipe data biner. Batas panjang saat ini adalah 8 MB. Ukuran maksimum tipe BINARY di Hologres adalah 1 GB.

REAL (alias: FLOAT4)

FLOAT

Didukung

Didukung

Didukung

Tipe floating-point biner 32-bit.

DOUBLE PRECISION (alias: FLOAT8)

DOUBLE

Didukung

Didukung

Didukung

Tipe floating-point biner 64-bit.

BOOLEAN (alias: BOOL)

BOOLEAN

Didukung

Didukung

Didukung

Tipe BOOLEAN.

TIMESTAMP

TIMESTAMP_NTZ

Didukung

Tidak didukung

Didukung

Presisi penyimpanan adalah dalam satuan nanodetik. Kesalahan zona waktu dapat terjadi.

Tipe TIMESTAMP di Hologres tidak mencakup zona waktu, dan presisi penyimpanannya adalah mikrodetik.

TIMESTAMP WITH TIME ZONE (alias: TIMESTAMPTZ)

TIMESTAMP

Didukung

Tidak didukung

Didukung

Tipe timestamp dengan presisi hingga nanodetik. Formatnya adalah yyyy-mm-dd hh:mm:ss.xxxxxxxxx.

MaxCompute dan Hologres melakukan konversi presisi di lapisan dasar. MaxCompute mengeluarkan data dalam format yang tidak mencakup zona waktu.

DECIMAL (alias: NUMERIC)

DECIMAL(precision,scale)

Didukung

Didukung

Didukung

Tipe data numerik eksak desimal.

  • precision: jumlah maksimum digit yang dapat direpresentasikan. Nilai yang valid: 1 <= precision <= 38.

  • scale: jumlah digit di bagian pecahan. Rentang nilai default: 0 <= scale <= 18.

Jika Anda tidak menentukan presisi untuk tipe DECIMAL di MaxCompute, nilai default adalah (38,18). Saat Anda menggunakan pernyataan IMPORT FOREIGN SCHEMA untuk membuat tabel, sistem secara otomatis mengonversi presisi.

CHAR(n)

CHAR(n)

Didukung

Didukung

Didukung

Tipe CHAR(n) di MaxCompute adalah tipe karakter dengan panjang tetap, di mana n merupakan panjangnya. Nilai maksimum n adalah 255. Jika panjang string kurang dari n, string tersebut diisi dengan spasi.

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

VARCHAR(n)

VARCHAR(n)

Didukung

Didukung

Didukung

Tipe VARCHAR(n) di MaxCompute adalah tipe karakter dengan panjang variabel, di mana n adalah panjangnya. Nilai n berkisar dari 1 hingga 65535.

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

DATE

DATE

Didukung

Didukung

Didukung

Tipe tanggal. Formatnya adalah yyyy-mm-dd.

INT4[]

ARRAY<INT>

Didukung

Tidak didukung

Didukung

Tipe kompleks ARRAY.

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

Tipe kompleks JSON. Didukung dalam mode pembacaan langsung.

JSON

STRING

Didukung

Tidak didukung

Tidak didukung

Tipe string. Batas panjang saat ini adalah 8 MB. Tipe JSON Hologres didukung dalam mode JDBC.

SERIAL (urutan auto-increment)

INT

Didukung

Tidak didukung

Didukung

Untuk bidang auto-increment SERIAL di Hologres, Anda dapat menggunakan tipe INT di MaxCompute untuk menerima data. Namun, fitur auto-increment tidak tersedia selama penulisan data.

RoaringBitmap

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

RoaringBitmap64

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

BIT(n)

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

VARBIT(n)

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

INTERVAL

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

TIMETZ

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

TIME

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

INET

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

MONEY

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

OID

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

UUID

Tidak didukung

Tidak didukung

Tidak didukung

Tidak didukung

Tidak ada tipe data yang sesuai di MaxCompute.

FAQ

Apa yang harus saya lakukan jika kesalahan "ODPS-0130071" dilaporkan saat saya membaca data langsung dari Hologres menggunakan MaxCompute?

  • Masalah

    Saat membaca data langsung dari Hologres, muncul kesalahan ODPS-0130071 Failed to split to equal size...max count: 7777. Contoh:

    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 langsung dari Hologres, kebijakan pemisahan mapper default digunakan (volume data input/ukuran split = 256 MB). Hal ini menyebabkan jumlah mapper konkuren yang dihasilkan oleh tugas melebihi batas maksimum 7.777.

    Catatan

    Batas ini mencegah pengiriman tugas yang menghasilkan mapper berlebihan, yang dapat memengaruhi stabilitas file atau koneksi jaringan Hologres.

  • Solusi

    Anda dapat mengatasi kesalahan dengan menyetel parameter berikut.

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

Apa yang harus saya lakukan jika pekerjaan SQL yang dijalankan pada tabel eksternal Hologres berjalan lambat?

Mencari data di tabel eksternal MaxCompute menggunakan SDK lambat.

  • Masalah

    Mencari data di tabel eksternal MaxCompute menggunakan SDK lambat.

  • Solusi

    Tabel eksternal hanya mendukung pemindaian tabel penuh, yang lambat. Gunakan tabel internal MaxCompute sebagai gantinya.

Apa yang harus saya lakukan jika kesalahan dilaporkan saat kata kunci digunakan sebagai nama kolom di Hologres?

  • Masalah

    Jika kata kunci digunakan sebagai nama kolom di Hologres tanpa konfigurasi khusus, muncul kesalahan berikut:

    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 bidang tabel sumber Hologres ke bidang tabel eksternal Hologres.

    Misalnya, jika tabel sumber Hologres berisi bidang kata kunci "offset", tambahkan parameter 'odps.federation.jdbc.colmapping'='offset:"offset"' saat membuat tabel eksternal Hologres.

Referensi

Untuk informasi selengkapnya tentang masalah umum dengan tabel eksternal Hologres, lihat Masalah umum dengan danau data terpadu dan tabel eksternal.