全部产品
Search
文档中心

MaxCompute:Tabel eksternal Hologres

更新时间:Jan 16, 2026

Topik ini menjelaskan cara membuat tabel eksternal Hologres menggunakan pernyataan CREATE EXTERNAL TABLE, serta menentukan detail seperti sumber data Hologres, informasi autentikasi STS, mode tanda tangan ganda, tabel tujuan yang dipetakan, dan informasi driver Java Database Connectivity (JDBC).

Pengenalan Fungsi

Hologres adalah gudang data analisis interaktif real-time yang kompatibel dengan protokol PostgreSQL dan terintegrasi secara mulus dengan MaxCompute. Dengan membuat tabel eksternal Hologres di MaxCompute, Anda dapat mengkueri data dari sumber data Hologres menggunakan driver JDBC PostgreSQL dan informasi autentikasi STS. Metode ini memungkinkan pengkuerian data secara langsung tanpa penyimpanan berlebih atau impor/ekspor data, sehingga hasil kueri dapat diperoleh dengan cepat.

Penerapan

  • Operasi data (DML)

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

    • Operasi INSERT OVERWRITE tidak didukung untuk tabel eksternal Hologres.

      Untuk menimpa data di Hologres dengan data dari MaxCompute, Anda dapat menggunakan semantik INSERT OVERWRITE milik Hologres. Dari Hologres, Anda dapat membaca tabel eksternal yang memetakan ke tabel MaxCompute. Untuk informasi selengkapnya, lihat INSERT OVERWRITE.

  • Risiko penulisan data

    Saat menulis sejumlah besar data ke tabel eksternal Hologres, beberapa proses menulis data secara paralel. Dalam kasus langka, proses penulisan dapat menulis ulang data, yang menyebabkan duplikasi data.

  • Partisi

    Tabel partisi di Hologres tidak dipetakan secara langsung ke tabel partisi di MaxCompute. Tabel eksternal Hologres tidak mendukung partisi. Namun, saat menggunakan mode baca langsung untuk mengkueri tabel eksternal MaxCompute yang memetakan ke tabel induk partisi di Hologres, pemangkasan partisi dapat dipicu jika kondisi kueri mencakup kolom kunci partisi dari tabel anak.

  • Tabel eksternal Hologres tidak mendukung properti kluster.

  • Tabel eksternal Hologres tidak dapat dipetakan ke tabel dinamis Hologres.

Tipe data yang didukung

  • Batasan tipe DECIMAL:

    Untuk tabel eksternal Hologres yang dibuat di MaxCompute, tipe data DECIMAL secara default ditetapkan sebagai decimal(38,18) dan tidak dapat diubah. Jika tabel sumber memiliki presisi lebih rendah, Anda dapat mendefinisikan kolom tersebut sebagai tipe STRING di tabel eksternal MaxCompute, lalu menggunakan fungsi CAST untuk mengonversi tipe saat mengkueri kolom tersebut.

  • Batasan tipe kompleks:

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

  • Tipe tidak kompatibel lainnya:

    Tipe data di Hologres seperti MONEY tidak memiliki padanan di MaxCompute dan tidak didukung.

Tabel berikut memberikan rincian lengkap:

Tipe data Hologres

Tipe data MaxCompute

JDBC read

JDBC write

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

Deskripsi

INTEGER (alias: INT atau INT4)

INT

已开通

已开通

已开通

Bilangan bulat bertanda 32-bit.

TEXT

STRING, VARCHAR

已开通

已开通

已开通

Tipe string. Batas panjang saat ini adalah 8 MB.

SMALLINT

SMALLINT

已开通

已开通

已开通

Bilangan bulat bertanda 16-bit.

INT2

SMALLINT

已开通

已开通

已开通

Bilangan bulat bertanda 16-bit.

BIGINT (alias: INT8)

BIGINT

已开通

已开通

已开通

Bilangan bulat bertanda 64-bit.

BYTEA

BINARY

已开通

已开通

已开通

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

REAL (alias: FLOAT4)

FLOAT

已开通

已开通

已开通

Tipe floating-point biner 32-bit.

DOUBLE PRECISION (alias: FLOAT8)

DOUBLE

已开通

已开通

已开通

Tipe floating-point biner 64-bit.

BOOLEAN (alias: BOOL)

BOOLEAN

已开通

已开通

已开通

Tipe BOOLEAN.

TIMESTAMP

TIMESTAMP_NTZ

已开通

未开通

已开通

Presisi penyimpanan adalah nanodetik. Kesalahan zona waktu mungkin terjadi.

Tipe TIMESTAMP di Hologres tidak mencakup zona waktu dan memiliki presisi penyimpanan mikrodetik.

TIMESTAMP WITH TIME ZONE (alias: TIMESTAMPTZ)

TIMESTAMP

已开通

未开通

已开通

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

MaxCompute dan Hologres melakukan konversi presisi di lapisan dasar. Output MaxCompute tidak mencakup format zona waktu.

DECIMAL (alias: NUMERIC)

DECIMAL(presisi,skala)

已开通

已开通

已开通

Tipe numerik eksak basis-10.

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

  • skala: menunjukkan jumlah digit pada bagian pecahan. Rentang nilai default: 0 <= skala <= 18.

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

CHAR(n)

CHAR(n)

已开通

已开通

已开通

Di MaxCompute, CHAR(n) adalah tipe karakter dengan panjang tetap, di mana n adalah panjangnya. Nilai maksimum n adalah 255. Jika panjangnya kurang, akan diisi dengan spasi.

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

VARCHAR(n)

VARCHAR(n)

已开通

已开通

已开通

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

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

DATE

DATE

已开通

已开通

已开通

Tipe tanggal. Formatnya adalah yyyy-mm-dd.

INT4[]

ARRAY<INT>

已开通

未开通

已开通

Tipe kompleks ARRAY.

INT8[]

ARRAY<BIGINT>

已开通

未开通

已开通

FLOAT4[]

ARRAY<FLOAT>

已开通

未开通

已开通

FLOAT8[]

ARRAY<DOUBLE>

已开通

未开通

已开通

BOOLEAN[]

ARRAY<BOOLEAN>

已开通

未开通

已开通

TEXT[]

ARRAY<STRING>

已开通

未开通

已开通

JSONB

JSON

未开通

未开通

已开通

Tipe kompleks JSON. Didukung dalam mode baca langsung.

JSON

STRING

已开通

未开通

未开通

Tipe string. Batas panjang saat ini adalah 8 MB. Mode JDBC mendukung tipe JSON Hologres.

SERIAL (urutan auto-increment)

INT

已开通

未开通

已开通

Untuk bidang urutan auto-increment di Hologres, Anda dapat menggunakan tipe INT di MaxCompute untuk menerima data. Namun, fitur auto-increment tidak tersedia saat menulis data.

RoaringBitmap

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

RoaringBitmap64

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

BIT(n)

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

VARBIT(n)

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

INTERVAL

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

TIMETZ

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

TIME

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

INET

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

MONEY

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

OID

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

UUID

Tidak didukung

未开通

未开通

未开通

Tidak ada tipe yang sesuai di MaxCompute.

Buat tabel eksternal Hologres

Anda dapat membuat tabel eksternal Hologres dalam mode STS atau mode tanda tangan ganda.

Catatan

Spesifikasi pembuatan tabel eksternal

  • Jika Anda mengaktifkan fitur daftar putih alamat IP untuk Hologres, buat tabel eksternal Hologres dalam mode tanda tangan ganda. Jika dibuat dalam mode STS, akses dari MaxCompute ke Hologres akan diblokir oleh daftar putih alamat IP.

  • Anda dapat memetakan tabel induk maupun tabel anak di Hologres ke tabel eksternal MaxCompute dengan menentukan nama tabel dalam pernyataan CREATE EXTERNAL TABLE. Namun, 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 kunci primer, pastikan data yang ditulis tidak bertentangan dengan kunci primer tersebut.

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

Kompatibilitas skema

Jika skema tabel sumber Hologres tidak konsisten dengan skema tabel eksternal:

  • Jumlah kolom tidak konsisten: Jika tabel sumber Hologres memiliki lebih sedikit kolom daripada DDL tabel eksternal, kesalahan akan dilaporkan saat membaca data dari Hologres, misalnya column "xxx" does not exist. Jika tabel sumber memiliki lebih banyak kolom, kolom tambahan tersebut akan diabaikan.

  • Tipe kolom tidak konsisten: MaxCompute tidak mendukung pemetaan tipe INT ke kolom STRING di tabel sumber Hologres. Anda dapat menggunakan tipe STRING untuk memetakan ke kolom INT, tetapi hal ini tidak disarankan.

Sintaks

Saat membuat tabel eksternal, Anda harus menentukan StorageHandler dalam pernyataan DDL CREATE EXTERNAL TABLE, serta mengonfigurasi informasi autentikasi STS (atau menggunakan mode tanda tangan ganda) dan titik akhir JDBC dari 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 tanda tangan ganda

Untuk contoh kode, lihat Buat tabel eksternal Hologres (mode tanda tangan ganda).

Tabel eksternal Hologres dengan tanda tangan ganda memungkinkan pengguna RAM yang sama mengakses tabel yang diotorisasi di MaxCompute dan Hologres tanpa otorisasi manual. Mode ini juga mendukung fitur daftar putih alamat IP Hologres, yang menyederhanakan konfigurasi keamanan.

-- Aktifkan sakelar tanda tangan ganda.
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 tanda tangan ganda. Tetapkan nilai ke true untuk mengaktifkan sakelar tanda tangan ganda.

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 akan dilaporkan.

  • Jika Anda menentukan IF NOT EXISTS, pernyataan akan berhasil dieksekusi terlepas dari apakah tabel dengan nama yang sama sudah ada. Metadata tabel yang sudah ada tidak akan berubah meskipun skema tabel yang sudah ada berbeda dengan skema tabel yang ingin Anda buat.

table_name

Ya

Nama tabel eksternal Hologres yang ingin Anda buat 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 menunjukkan bahwa metode koneksi JDBC digunakan.

ram_arn

Ya

Diperlukan saat membuat tabel eksternal Hologres dalam mode STS. Menentukan ARN peran RAM untuk autentikasi STS saat membuat tabel eksternal.

  1. Login 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 tanda tangan ganda.

LOCATION

Ya

Titik akhir JDBC instans Hologres. Berisi parameter berikut:

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

    Penting

    Hanya akses melalui jaringan klasik yang didukung. Akses melalui VPC tidak didukung.

  • port: Wajib. Port jaringan instans Hologres.

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

    2. Di panel navigasi sebelah kiri, pilih Instances.

      Di halaman Instances, klik nama instans yang dituju.

  • database: Wajib. Nama database Hologres yang ingin Anda hubungkan. Untuk informasi selengkapnya tentang database Hologres, lihat CREATE DATABASE.

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

  • schema: Opsional. Jika nama tabel unik dalam database Hologres, atau jika tabel sumber berada dalam skema default, Anda tidak perlu mengonfigurasi properti ini. 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.

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

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

    Menentukan jenis database yang akan dihubungkan. Nilainya tetap holo.

  • odps.federation.jdbc.colmapping: Opsional.

    Untuk memetakan beberapa kolom dari sumber data yang ditentukan ke tabel eksternal Hologres, konfigurasikan 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 Anda mengonfigurasi parameter ini tetapi hanya menentukan pemetaan untuk beberapa kolom tabel eksternal Hologres, bidang tabel sumber dipetakan ke kolom dengan nama yang sama di tabel eksternal Hologres. Untuk kolom lain yang tidak ditentukan, kesalahan akan dilaporkan jika nama kolom atau tipe tidak cocok.

    • Jika Anda mengonfigurasi parameter ini dan nama bidang di Hologres mengandung huruf kapital, sertakan nama bidang Hologres dalam tanda kutip ganda (""). Format: MaxCompute field1 : "Hologres field1"[ ,MaxCompute field2 : "Hologres field2" ,...].

      Catatan

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

      Jika Anda menetapkan colmapping ke 'x: "map_B"', pemetaan berhasil dan Anda dapat mengkueri data 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 Anda menggunakan alias, nama harus konsisten dengan alias tersebut. 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, Anda dapat melewati langkah ini.

Buat database Hologres

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

  2. Di panel navigasi sebelah kiri, pilih Instances.

  3. Jika belum memiliki instans, 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)

Prasyarat

  1. Klien MaxCompute telah diinstal dan dikonfigurasi.

  2. Proyek MaxCompute tujuan tersedia untuk membuat tabel eksternal Hologres.

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

Buat dan berikan izin ke peran RAM

Catatan

Hologres tidak mendukung penambahan peran RAM dari akun Alibaba Cloud yang berbeda ke instans database. Oleh karena itu, dalam mode STS, Hologres hanya mendukung otorisasi untuk peran RAM yang termasuk dalam akun yang sama.

Demikian pula, saat MaxCompute mengakses tabel eksternal atau skema eksternal Hologres, hanya peran RAM dari akun yang sama yang didukung.

  1. Buat peran RAM

    Buat peran RAM untuk mendapatkan ARN-nya. ARN digunakan untuk autentikasi STS saat membuat tabel eksternal. Pilih jenis entitas tepercaya untuk peran RAM sesuai kebutuhan. Dalam contoh ini, entitas tepercayanya adalah akun Alibaba Cloud.

    • Akun Alibaba Cloud: Pengguna RAM di bawah akun Alibaba Cloud dapat mengasumsikan peran RAM untuk mengakses sumber daya cloud. Untuk informasi selengkapnya, lihat Buat peran RAM untuk akun Alibaba Cloud tepercaya.

    • Penyedia identitas: Anda dapat mengatur single sign-on (SSO) untuk login ke Konsol Manajemen Alibaba Cloud dari sistem identitas lokal Anda. Ini berguna bagi perusahaan yang memerlukan autentikasi login pengguna terpadu. Untuk informasi selengkapnya, lihat Buat peran RAM untuk IdP tepercaya.

    Lakukan langkah-langkah berikut:

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

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

    3. Di halaman Roles, klik Create Role.

    4. Di halaman Create Role, atur Principal Type ke Cloud Account.

  2. Ubah kebijakan kepercayaan

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

    2. Di tab Trust Policy, klik Edit Trust Policy. Di halaman Edit Trust Policy, klik tab JSON.

    3. Perbarui kebijakan kepercayaan dengan konten berikut.

      Ubah kebijakan kepercayaan berdasarkan konten berikut. Konfigurasi kebijakan kepercayaan bervariasi tergantung pada jenis entitas tepercaya yang Anda pilih. <UID> dalam kebijakan adalah ID akun Alibaba Cloud, yang dapat Anda temukan di halaman Informasi Pengguna.

      Jenis entitas tepercaya adalah akun Alibaba Cloud

      {
        "Statement": [
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "RAM": [
                "acs:ram::<UID>:root"
              ]
            }
          },
          {
            "Action": "sts:AssumeRole",
            "Effect": "Allow",
            "Principal": {
              "Service": [
                "<UID>@odps.aliyuncs.com"
              ]
            }
          }
        ],
        "Version": "1"
      }

      Jenis entitas tepercaya adalah penyedia identitas

      {
        "Statement": [
              {
                  "Action": "sts:AssumeRole",
                  "Condition": {
                      "StringEquals": {
                          "saml:recipient": "https://signin.aliyun.com/saml-role/sso"
                      }
                  },
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": [
                          "acs:ram::<UID>:saml-provider/IDP"
                      ]
                  }
              },
              {
                  "Action": "sts:AssumeRole",
                  "Effect": "Allow",
                  "Principal": {
                      "Service": [
                          "<UID>@odps.aliyuncs.com"
                      ]
                  }
              }
          ],
          "Version": "1"
      }
  3. Tambahkan peran RAM ke instans Hologres dan berikan izin

    Peran RAM memerlukan izin developer pada instans Hologres. Secara default, peran RAM tidak dapat melihat atau mengoperasikan instans di konsol Hologres. Oleh karena itu, akun Alibaba Cloud harus memberikan izin yang diperlukan kepada peran RAM. Anda dapat menambahkan peran RAM ke instans Hologres dan memberikan izin menggunakan salah satu metode berikut:

    Berikan izin di konsol Hologres

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

    2. Di panel navigasi sebelah kiri, pilih Instances.

    3. Di halaman Instances, klik nama instans yang dituju.

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

    5. Klik tab Security Center di atas.

      Di panel navigasi sebelah kiri, pilih User Management.

    6. Di tab Database Authorization, berikan izin developer kepada peran RAM untuk instans tersebut.

      Jika kebijakan akses database diatur ke Expert Mode, Anda perlu mengubah tipe peran menjadi SuperUser di halaman User Management. Setelah perubahan ini, Anda tidak perlu memberikan izin database secara terpisah.

    Berikan izin di konsol RAM

    Jika pengguna RAM mengasumsikan peran RAM, pengguna RAM tersebut tidak memiliki izin pada konsol Hologres secara default. Akun Alibaba Cloud harus memberikan izin AliyunRAMReadOnlyAccess kepada pengguna RAM di konsol RAM. Jika tidak, pengguna RAM tidak dapat melakukan operasi apa pun di konsol Hologres. Untuk informasi selengkapnya, lihat Berikan izin kepada pengguna RAM.

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

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

    3. Di halaman Roles, di kolom Actions untuk Role Name yang dituju, klik Grant Permission.

    4. Pilih kebijakan AliyunRAMReadOnlyAccess untuk memberikan izin kepada peran saat ini.

    Berikan izin menggunakan pernyataan SQL

    Untuk memberikan izin menggunakan pernyataan SQL, lihat model izin Hologres.

Buat tabel eksternal di MaxCompute

  1. Login ke klien MaxCompute dan beralih ke proyek MaxCompute tujuan.

  2. Jalankan perintah berikut untuk membuat tabel eksternal Hologres.

    Informasi instans Hologres yang disiapkan dalam langkah Persiapkan data adalah sebagai berikut:

    • 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 informasi tabel sumber Hologres menggunakan tabel eksternal Hologres yang baru dibuat.

    -- Tambahkan properti berikut 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. Lakukan pertukaran data dan analisis gabungan dengan Hologres menggunakan tabel eksternal Hologres.

    • Anda dapat menulis data yang diproses oleh MaxCompute ke Hologres menggunakan tabel eksternal untuk mempercepat analisis dan layanan online. Perintah contoh berikut menunjukkan contohnya.

      -- Tambahkan properti berikut 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        | 
      +------------+------------+
    • Anda dapat menyimpan tabel dimensi yang sering diperbarui di Hologres untuk memenuhi persyaratan pembaruan real-time. MaxCompute kemudian dapat mengakses tabel dimensi ini menggunakan tabel eksternal dan melakukan analisis asosiasi dengan tabel fakta yang disimpan di MaxCompute. Perintah contoh berikut menunjukkan contohnya.

      -- Tambahkan properti berikut 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 asosiasi 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 tanda tangan ganda)

Tanda tangan ganda adalah protokol autentikasi dan otorisasi yang dikembangkan bersama oleh MaxCompute dan Hologres. Setelah informasi login ditandatangani di sisi MaxCompute, data autentikasi diteruskan ke sisi Hologres. Hologres melakukan autentikasi dan otorisasi berdasarkan protokol dasar yang disepakati dengan MaxCompute. Hal ini memungkinkan pengguna dengan nama akun yang sama di MaxCompute dan Hologres untuk mengakses tabel eksternal tanpa pengaturan autentikasi tambahan.

Prasyarat

  1. Klien MaxCompute telah diinstal dan dikonfigurasi.

  2. Proyek MaxCompute tujuan tersedia untuk membuat tabel eksternal Hologres.

    Untuk informasi 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 yang lebih baru yang mendukung pembuatan tabel eksternal Hologres dalam mode tanda tangan ganda di MaxCompute. Saat ini, mode tanda tangan ganda hanya mendukung pembacaan data dari tabel eksternal Hologres, bukan penulisan data ke dalamnya.

Buat tabel eksternal di MaxCompute

  1. Login ke klien MaxCompute dan beralih ke proyek MaxCompute tujuan.

  2. Jalankan perintah berikut untuk membuat tabel eksternal Hologres.

    Informasi instans Hologres yang disiapkan dalam langkah Persiapkan data adalah sebagai berikut:

    • 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 (harus dijalankan bersama perintah untuk mengaktifkan sakelar tanda tangan ganda).
    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 fitur baca langsung untuk tabel eksternal Hologres

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

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

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

Batasan

Saat mode baca langsung Hologres diaktifkan, batasan berikut berlaku. Jika kondisi tidak terpenuhi, sistem akan kembali ke mode JDBC.

  1. Persyaratan versi

    Instans Hologres harus V1.3.34 atau lebih baru. Versi sebelum V1.3.34 tidak mendukung fitur baca langsung.

  2. Batasan jenis tabel

    • Membaca langsung tabel penyimpanan dingin Hologres tidak didukung.

    • Membaca langsung tabel berorientasi baris Hologres tidak didukung.

  3. Batasan pemetaan tipe data

    Saat MaxCompute menggunakan tipe Timestamp untuk memetakan tipe Timestamp With Time Zone di Hologres dalam mode baca langsung, kesalahan waktu kecil mungkin terjadi. Perbedaan spesifiknya adalah sebagai berikut:

    • Kesalahan nilai waktu

      • Jika waktu dalam kolom Timestamp With Time Zone di Hologres sebelum 1900-12-31 15:54:15, waktu yang dikueri oleh MaxCompute akan 5 menit 44 detik lebih awal.

      • 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 akan 1 detik lebih awal.

      • Jika waktu dalam kolom Timestamp With Time Zone di Hologres setelah 1969-12-31 23:59:59, waktu yang dikueri oleh MaxCompute sama dengan waktu di Hologres.

    • Offset zona waktu

      • Jika zona waktu MaxCompute adalah 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 zona waktu MaxCompute adalah 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, MaxCompute hanya dapat mengakses instans Hologres di wilayah yang sama. Akses lintas wilayah akan menghasilkan kesalahan: FAILED: ODPS-0010000:System internal error - fuxi job failed, caused by: Pangu request failed with error code 3.

  5. Jika Hologres dikonfigurasi dengan arsitektur primer/sekunder, Anda hanya dapat mengonfigurasi URL koneksi instans primer. Instans sekunder tidak didukung.

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

Cara mengaktifkan

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

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

Tetapkan sakelar baca langsung tingkat proyek.

-- Sakelar baca langsung dan sakelar untuk menonaktifkan fallback ke JDBC keduanya dapat diatur pada tingkat proyek.
-- Aktifkan sakelar baca langsung pada tingkat proyek: 
setproject odps.table.api.enable.holo.table=true; --true untuk mengaktifkan | false untuk menonaktifkan

-- Nonaktifkan sakelar fallback default ke JDBC: 
setproject odps.table.api.allow.fallback.jdbc=false; --true untuk fallback | false untuk tidak fallback

Verifikasi baca langsung

Anda dapat memeriksa log di Logview untuk menentukan apakah kueri menggunakan mode baca langsung. Untuk informasi selengkapnya tentang penggunaan Logview, lihat Gunakan Logview 2.0 untuk melihat informasi eksekusi pekerjaan.

Di tab Summary Logview, temukan bidang external holo tables untuk melihat propertinya. Format properti adalah 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 tabel eksternal. Nilai valid:

  • Optimized: Menunjukkan bahwa mode baca langsung digunakan. Contoh Logview berikut menunjukkan mode ini.直读模式

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

Fallback reason

Jika access mode adalah Fallback, parameter ini menunjukkan alasan kembali ke mode JDBC. Nilai dan solusi berikut disediakan:

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

  • Holo connection error: Koneksi instans Hologres tidak normal. Hal ini mungkin disebabkan oleh informasi izin yang salah atau status instans Hologres yang salah. Periksa apakah pengguna saat ini memiliki izin untuk mengakses database Hologres yang sesuai atau apakah instans Hologres saat ini dalam keadaan siap melayani.

  • Odps table is partition table: Tabel eksternal Hologres yang dibuat di MaxCompute adalah tabel partisi. Hal ini saat 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 baca langsung mungkin kembali ke mode JDBC jika menghadapi batasan baca langsung. Jika beban bisnis tinggi, fallback ini dapat mengonsumsi banyak sumber daya kolam koneksi Hologres. Selain itu, efisiensi transfer data dalam mode JDBC jauh lebih rendah daripada mode baca langsung, dan sumber daya dilepaskan lebih lambat.

Perhatikan bahwa fallback ke mode JDBC dapat memberikan tekanan pada instans Hologres. Dalam kasus ekstrem, banyak pekerjaan fallback dapat memengaruhi layanan lain yang mengakses instans Hologres. Untuk mencegah hal ini, Anda dapat menonaktifkan fallback otomatis dengan menambahkan parameter eksekusi set odps.table.api.allow.fallback.jdbc=false; ke tugas baca langsung untuk menghindari dampak tak terduga.

Impor dan ekspor data Hologres

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

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

FAQ

Bagaimana cara mengatasi kesalahan ODPS-0130071 yang terjadi saat saya membaca data Hologres secara langsung dari MaxCompute?

  • Gejala

    Saat membaca data Hologres secara langsung, kesalahan ODPS-0130071 Failed to split to equal size...max count: 7777 dilaporkan. Misalnya:

    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 secara langsung dari Hologres, kebijakan pemisahan Mapper default digunakan (volume data masukan / ukuran split 256 MB). Hal ini menyebabkan jumlah tugas Mapper yang dihasilkan oleh pekerjaan melebihi batas maksimum 7777.

    Catatan

    Batasan ini mencegah pengguna mengirimkan pekerjaan yang menghasilkan banyak tugas Mapper, yang dapat memengaruhi stabilitas file Hologres atau koneksi jaringan.

  • Solusi

    Anda dapat menyetel parameter berikut untuk mengatasi kesalahan.

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

Mengapa pekerjaan SQL lambat saat dijalankan pada tabel eksternal Hologres dan bagaimana cara memperbaikinya?

Kueri pada tabel eksternal MaxCompute lambat saat Anda menggunakan SDK.

  • Gejala

    Pekerjaan SQL yang mengkueri tabel eksternal MaxCompute menggunakan SDK berjalan lambat.

  • Solusi

    Tabel eksternal hanya mendukung pemindaian tabel penuh, yang lambat. Kami menyarankan Anda menggunakan tabel internal MaxCompute sebagai gantinya.

Bagaimana cara mengatasi kesalahan yang terjadi saat kata kunci digunakan sebagai nama kolom di Hologres?

  • Gejala

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

    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 antara tabel sumber Hologres dan tabel eksternal Hologres.

    Sebagai contoh, jika tabel sumber Hologres berisi bidang kata kunci "offset", Anda harus menambahkan parameter 'odps.federation.jdbc.colmapping'='offset:"offset"' saat membuat tabel eksternal Hologres.

Referensi

Untuk jawaban atas pertanyaan umum tentang tabel eksternal Hologres, lihat Data lakehouse/FAQ tabel eksternal.