全部产品
Search
文档中心

Hologres:Fungsi EXTERNAL_FILES

更新时间:Feb 06, 2026

Mulai dari Hologres V4.1, Anda dapat menggunakan fungsi EXTERNAL_FILES untuk langsung melakukan kueri, impor, dan ekspor file data terstruktur yang disimpan di Object Storage Service (OSS) tanpa membuat tabel eksternal. Topik ini menjelaskan prasyarat, sintaksis, parameter, contoh, dan batasan.

Ikhtisar

Fungsi EXTERNAL_FILES memungkinkan Anda melakukan kueri, impor, dan ekspor file data terstruktur di OSS tanpa membuat tabel eksternal. Fungsi ini mendukung skenario berikut:

  • Kueri data: Lakukan kueri terhadap file CSV, Parquet, dan ORC di OSS.

  • Impor data: Impor data dari OSS ke tabel internal Hologres.

  • Ekspor data: Ekspor data dari tabel Hologres ke OSS.

Prasyarat

Persyaratan versi

Instans Hologres Anda harus menjalankan versi V4.1 atau yang lebih baru. Jika instans Anda menggunakan versi sebelumnya, lakukan upgrade. Untuk informasi selengkapnya, lihat Instance upgrades.

Konfigurasi izin

Hanya Pengguna RAM atau Akun Alibaba Cloud yang dapat menggunakan EXTERNAL_FILES. Akun kustom tidak didukung. Sebelum menggunakan EXTERNAL_FILES, selesaikan langkah-langkah berikut. EXTERNAL_FILES mengakses OSS melalui Peran RAM. Pertama, buat Peran RAM dan berikan kepada layanan Hologres. Kemudian, berikan izin OSS kepada peran tersebut.

Buat peran

  • Masuk ke Konsol RAM di RAM Roles. Buka halaman Roles dan klik Create Role.

  • Pada kotak dialog, atur Trusted Entity Type ke Cloud Service dan Trusted Entity ke Real-time Data Warehouse Hologres.

  • Masukkan nama peran dan selesaikan pembuatan.

Konfigurasi izin akses OSS

Berikan izin OSS kepada Peran RAM:

  • Baca data: Berikan izin AliyunOSSReadOnlyAccess.

  • Tulis data: Berikan izin AliyunOSSFullAccess.

Berikan izin GrantAssumeRole kepada pengguna SQL

Jika pengguna yang menjalankan SQL bukan Akun Alibaba Cloud, berikan izin GrantAssumeRole terlebih dahulu:

  • Di Konsol RAM, buat kebijakan izin. Buka Policies > Create Policy > Script Editor. Tempel JSON berikut. Ganti Role_ARN dengan role_arn yang sama yang digunakan di EXTERNAL_FILES. Untuk menemukan Role ARN, lihat FAQ about RAM roles and STS tokens.

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "hologram:GrantAssumeRole",
      "Resource": "<RoleARN>"
    }
  ]
}

Kemudian, sambungkan kebijakan ini ke pengguna yang menjalankan kueri. Untuk Pengguna RAM, buka Users > Permissions > Add Permissions. Untuk Peran RAM, buka Roles > Permissions > Add Permissions.

Sintaksis

Kueri data

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv|parquet|orc',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) [AS (col1 type1, col2 type2, ...)]

Impor data

INSERT INTO target_table 
SELECT * FROM EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv|parquet|orc',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) [AS (col1 type1, col2 type2, ...)]

Ekspor data

INSERT INTO EXTERNAL_FILES(
    path = 'oss://bucket/path',
    format = 'csv',
    oss_endpoint = 'oss_endpoint',
    role_arn = 'acs:ram::xxx:role/xxx'
    [, other parameters...]
) SELECT * FROM source_table;

Parameter

Parameter umum

Parameter

Deskripsi

Wajib

Contoh

path

Jalur file. Mendukung direktori dan file. Anda dapat menentukan beberapa jalur yang dipisahkan koma. Mendukung wildcard ? (mencocokkan satu karakter apa pun) dan wildcard * (mencocokkan nol atau lebih karakter).

Ya

oss://bucket/dir/, oss://bucket/dir/*.csv

format

Format file. Untuk kueri, mendukung csv, parquet, dan orc. Untuk ekspor, hanya mendukung csv.

Ya

csv

oss_endpoint

Titik akhir jaringan klasik OSS. Untuk informasi selengkapnya, lihat Regions and endpoints.

Tidak

oss-cn-hangzhou-internal.aliyuncs.com

role_arn

ARN dari Peran RAM Alibaba Cloud.

Tidak

acs:ram::xxx:role/xxx

Parameter baca

Nama Parameter

Deskripsi

Wajib

Contoh

schema_deduce_file_num

Jumlah maksimum file yang dipindai saat melakukan inferensi skema. Default: 5.

Tidak

10

schema_deduce_file_order

Urutan pemindaian file untuk inferensi skema. Default: latest_first.

Tidak

latest_first, earliest_first, random

csv_skip_header

Apakah baris pertama file CSV dilewati sebagai header tabel. Default: false.

Tidak

true

csv_delimiter

Pemisah kolom untuk file CSV. Default: koma.

Tidak

|

Parameter tulis

Nama parameter

Deskripsi

Wajib

Contoh

target_file_size_mb

Ukuran setiap file output dalam MB. Default: 10.

Tidak

500

single_file

Apakah semua data ditulis ke satu file. Default: false.

Tidak

true

Contoh

Contoh 1: Kueri file CSV

Lakukan kueri terhadap file CSV di OSS dan inferensi skema secara otomatis:

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    csv_skip_header = 'true',
    csv_delimiter = ',',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Lakukan kueri terhadap file CSV dan tentukan skema secara manual:

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    csv_skip_header = 'true',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
) AS (id int, name text, amount decimal(10,2));

Contoh 2: Kueri file Parquet

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/parquet_data/',
    format = 'parquet',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Contoh 3: Kueri file ORC

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/orc_data/',
    format = 'orc',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Contoh 4: Impor data ke tabel Hologres

-- Buat tabel target
CREATE TABLE orders (
    order_id int,
    customer_name text,
    amount decimal(10,2),
    PRIMARY KEY(order_id)
);

-- Impor data dari OSS
INSERT INTO orders 
SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/orders/',
    format = 'csv',
    csv_skip_header = 'true',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
) AS (order_id int, customer_name text, amount decimal(10,2));

Contoh 5: Ekspor data ke OSS

Ekspor data ke beberapa file:

INSERT INTO EXTERNAL_FILES(
    path = 'oss://mybucket/export/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role',
    target_file_size_mb = '100'
) SELECT * FROM orders;

Ekspor data ke satu file:

INSERT INTO EXTERNAL_FILES(
    path = 'oss://mybucket/export/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role',
    single_file = 'true'
) SELECT * FROM orders;

Contoh 6: Gunakan kelompok sumber daya arsitektur tanpa server

SET hg_computing_resource = 'serverless';

SELECT * FROM EXTERNAL_FILES(
    path = 'oss://mybucket/data/',
    format = 'csv',
    oss_endpoint = 'oss-cn-hangzhou-internal.aliyuncs.com',
    role_arn = 'acs:ram::123456789:role/hologres-role'
);

Aturan inferensi skema

Inferensi skema otomatis

Jika Anda tidak menentukan skema menggunakan klausa AS, Hologres akan melakukan inferensi skema secara otomatis:

  • Parquet/ORC: Inferensi dari metadata file.

  • CSV dengan header: Inferensi dari baris pertama (header) dan konten data.

  • CSV tanpa header: Semua file harus memiliki skema yang identik.

Hologres memindai jumlah file yang ditentukan oleh parameter schema_deduce_file_num dan menggabungkan semua skema yang ditemukan.

Perilaku inferensi skema

Skenario

Tindakan

Kolom dalam skema tidak ada di file

Isi dengan NULL

Kolom dalam file tidak ada di skema

Abaikan kolom tersebut

Tipe kolom tidak cocok tetapi dapat dikonversi

Konversi Tipe Otomatis

Tipe kolom tidak cocok dan tidak dapat dikonversi

Kembalikan NULL

Pemetaan tipe

Saat EXTERNAL_FILES membaca file ORC atau Parquet, tipe data dalam file tersebut dipetakan ke tipe PostgreSQL. Pemetaan tersebut tercantum di bawah ini. Tipe yang tidak didukung dicantumkan setelah setiap tabel.

Pemetaan tipe ORC

Tipe ORC

Tipe PostgreSQL

BOOLEAN

BOOLEAN

TINYINT / SMALLINT

SMALLINT

INT

INTEGER

BIGINT

BIGINT

FLOAT

REAL

DOUBLE

DOUBLE PRECISION

DECIMAL(p, s)

DECIMAL(p, s)

STRING

TEXT

VARCHAR(n)

VARCHAR(n)

CHAR(n)

CHAR(n)

BINARY

BYTEA

DATE

DATE

TIMESTAMP

TIMESTAMP WITHOUT TIME ZONE

TIMESTAMP WITH LOCAL TIMEZONE

TIMESTAMP WITH TIME ZONE

LIST

Array (pg_type[])

Catatan

Tipe ORC UNION, STRUCT, dan MAP tidak didukung.

Pemetaan tipe Parquet

Tipe fisik Parquet

Tipe logis Parquet

Tipe PostgreSQL

BOOLEAN

BOOLEAN

INT32

INTEGER

INT32

DATE

DATE

INT32

DECIMAL(p, s)

DECIMAL(p, s)

INT64

BIGINT

INT64

TIMESTAMP_MILLIS / MICROS

TIMESTAMP / TIMESTAMPTZ

INT64

DECIMAL(p, s)

DECIMAL(p, s)

FLOAT

REAL

DOUBLE

DOUBLE PRECISION

BYTE_ARRAY

BYTEA

BYTE_ARRAY

STRING

TEXT

BYTE_ARRAY

JSON / BSON

JSONB

BYTE_ARRAY

ENUM

TEXT

FIXED_LEN_BYTE_ARRAY

DECIMAL(p, s)

DECIMAL(p, s)

FIXED_LEN_BYTE_ARRAY

UUID

UUID

LIST

LIST

Array (pg_type[])

Catatan

Tipe Parquet STRUCT dan MAP tidak didukung.

Batasan

  • Format ekspor: Hanya CSV yang didukung untuk ekspor.

  • Pencarian rekursif: Subdirektori tidak dicari secara rekursif.

  • Tipe yang tidak didukung: Tipe ORC UNION, STRUCT, dan MAP; serta tipe Parquet STRUCT dan MAP.

FAQ

T: Saya mendapatkan error izin saat mengekspor data. Apa yang harus saya lakukan?

J: Pastikan Peran RAM memiliki izin AliyunOSSFullAccess.

T: Bagaimana cara mengontrol ukuran file yang diekspor?

J: Gunakan parameter target_file_size_mb untuk mengatur ukuran setiap file. Untuk kontrol yang lebih rinci, sesuaikan parameter hg_experimental_query_batch_size.