Error umum dan solusi untuk mengkueri data MaxCompute melalui tabel eksternal Hologres.
Sebelum Anda melakukan pemecahan masalah
Kumpulkan diagnostik berikut sebelum menyelidiki error tertentu:
-
Periksa log kueri. Kueri
hologres.hg_query_loguntuk menemukan kueri yang gagal beserta detailnya. -
Identifikasi mesin eksekusi. Periksa bidang
engine_typedalam log kueri. Hologres menggunakan dua mesin untuk memproses kueri tabel eksternal:-
HQE (Hologres Query Engine): Akses tabel eksternal yang dipercepat.
-
SQE (Standard Query Engine): Mesin fallback.
-
-
Periksa versi Hologres Anda. Banyak perbaikan memerlukan versi tertentu. Jalankan
SELECT hg_version();untuk mengonfirmasi.
Latar Belakang
Hologres vs. MaxCompute
|
Aspek |
MaxCompute |
Hologres |
|
Skema penggunaan |
Pemrosesan ETL untuk lapisan DWD dan DWS |
Kueri interaktif dan penyajian data real-time untuk lapisan ADS |
|
Interaksi pengguna |
Eksekusi job asinkron |
Kueri sinkron |
|
Sumber daya kluster |
Kluster bersama, pengiriman SaaS |
Kluster dedicated, pengiriman PaaS |
|
Mesin eksekusi |
Model eksekusi job. Tahapan meminta sumber daya sesuai kebutuhan; hasil antara disimpan ke disk. |
Arsitektur MPP dengan eksekusi berbasis memori dan penjadwalan di user-space. Tidak ada penulisan ke disk untuk hasil antara. |
|
Penjadwalan |
Tingkat proses. Sumber daya dialokasikan secara dinamis pada waktu proses. |
Tingkat thread. Sumber daya dialokasikan sebelum startup. |
|
Ekstensibilitas |
Virtually unlimited |
Untuk kueri kompleks, hindari pengacakan data lintas beberapa node |
|
Format penyimpanan |
Columnar |
Berbasis baris, columnar, dan hibrida baris-kolom |
|
Biaya penyimpanan |
Biaya rendah, berbasis Pangu |
Biaya relatif tinggi, berbasis Pangu dengan SSD untuk caching dan akselerasi |
|
Standar antarmuka |
SQL MaxCompute, mirip Hive |
PostgreSQL |
Tabel eksternal vs. tabel internal
-
Tabel eksternal mengakses data langsung dari MaxCompute tanpa menyimpannya secara lokal. Tidak memiliki indeks — komputasi hanya menggunakan CPU. Paling cocok untuk dataset kecil dengan QPS rendah.
-
Tabel internal menyimpan data di Hologres dengan dukungan indeks penuh. Impor data untuk kueri kompleks, pembaruan sering, atau skenario QPS tinggi.
Error izin
Izin SELECT tidak tersedia pada tabel MaxCompute
You have NO privilege 'odps:Select' on {table}
atau:
You have NO privilege 'MaxCompute:Select' on {table}
Penyebab: Akun Anda tidak memiliki izin SELECT pada tabel MaxCompute tersebut.
Solusi: Minta administrator MaxCompute untuk memberikan hak istimewa SELECT pada tabel tersebut. Untuk detailnya, lihat izin MaxCompute.
Izin SELECT tidak tersedia pada tabel lintas proyek
You have NO privilege 'odps:Select' on {table}
Error ini juga terjadi saat mengkueri tabel MaxCompute lintas proyek, bahkan dengan kontrol akses berbasis paket.
Penyebab: Hologres perlu mengetahui konteks proyek MaxCompute mana yang digunakan untuk otorisasi dalam skenario lintas proyek.
Solusi: Tetapkan nama proyek saat ini sebelum menjalankan kueri Anda:
-- Untuk Hologres V0.8+:
set hg_experimental_odps_current_project_name = 'holoprojectname';
-- Untuk Hologres V0.7:
set seahawks.seahawks_internal_current_odps_project = 'holoprojectname';
Ketidaksesuaian label sensitif tingkat kolom
The sensitive label of column '{column}' is 2, but your effective label is 0
Penyebab: Akun Anda hanya memiliki izin pada beberapa kolom di tabel MaxCompute. Versi Hologres sebelum V0.8 belum mendukung sepenuhnya izin tingkat kolom.
Solusi: Pilih salah satu opsi berikut:
-
Upgrade ke V0.8 atau lebih baru (disarankan). Versi ini menangani izin tingkat kolom dengan benar.
-
Modifikasi kueri Anda agar hanya mencakup kolom yang dapat diakses oleh akun Anda.
-
Minta izin untuk semua kolom. Lihat izin MaxCompute.
-
Solusi sementara untuk versi lama: Tetapkan parameter GUC (Grand Unified Configuration) berikut sebelum menjalankan kueri Anda:
set hg_experimental_enable_odps_executor = on;
set hg_experimental_enable_query_master = on;
Jika Anda menggunakan versi yang lebih baru namun masih melihat error ini, kemungkinan ini merupakan cacat sistem. Gunakan solusi sementara alternatif berikut:
set hg_experimental_enable_MaxCompute_executor = on;
set hg_experimental_enable_query_master = on;
Izin LIST tidak tersedia (HoloWeb atau DataStudio)
You have NO privilege 'odps:List' on {project}
Penyebab: Pembuatan tabel eksternal melalui HoloWeb atau DataStudio memerlukan izin List di MaxCompute untuk menampilkan tabel yang tersedia.
Solusi:
-
Minta administrator MaxCompute untuk memberikan izin
List. Lihat izin MaxCompute. -
Atau, buat tabel eksternal secara langsung dengan pernyataan SQL
CREATE FOREIGN TABLE, yang tidak memerlukan izinList. Lihat Mempercepat kueri data MaxCompute berdasarkan tabel eksternal.
Akses ditolak oleh daftar putih IP
Access denied by project ip white list
Penyebab: Proyek MaxCompute target telah mengaktifkan daftar putih IP, dan alamat IP server HoloWeb (sourceIP dalam pesan error) tidak termasuk dalam daftar tersebut.
Solusi: Tambahkan sourceIP dari pesan error ke daftar putih IP proyek MaxCompute target.
Tabel eksternal temporary tersisa saat mengimpor tabel partisi MaxCompute dari HoloWeb
Impor satu klik tabel partisi MaxCompute dari HoloWeb berhenti dengan error berikut:
ERROR: relation "tmp_foreign_XXX" already exists
tmp_foreign_XXX adalah nama tabel eksternal temporary yang dilaporkan dalam pesan error.
Penyebab: HoloWeb membuat tabel eksternal temporary bernama tmp_foreign_XXX untuk membaca data sumber selama impor satu klik. Jika impor gagal atau terganggu, tabel eksternal temporary tetap berada di database. Upaya impor berikutnya kemudian gagal karena tabel dengan nama yang sama sudah ada.
Solusi:
-
Periksa apakah tabel eksternal temporary tersisa masih berisi data. Ganti
tmp_foreign_XXXdengan nama tabel dari pesan error.SELECT * FROM tmp_foreign_XXX LIMIT 1; -
Tangani hasilnya:
-
Jika tabel tidak mengembalikan baris apa pun, atau datanya sudah sampai di tabel tujuan, hapus tabel sisa tersebut:
DROP TABLE tmp_foreign_XXX; -
Jika tabel masih berisi baris, pastikan data telah sampai di tabel tujuan, lalu hapus tabel sisa tersebut.
-
-
Jalankan kembali impor satu klik tabel partisi MaxCompute di HoloWeb.
Akun tidak ada di proyek MaxCompute
You don't exist in project {project}
Penyebab: Akun Anda belum ditambahkan sebagai anggota ke proyek MaxCompute yang ditentukan.
Solusi: Verifikasi bahwa nama proyek dalam error sudah benar. Jika benar, minta administrator MaxCompute untuk menambahkan akun Anda ke proyek tersebut. Lihat Ikhtisar izin.
Otorisasi peran enkripsi tidak tersedia
query next from foreign table executor failed validate userinfo
Penyebab: Hologres belum diberikan peran AliyunHologresEncryptionDefaultRole. Error ini juga dapat muncul secara intermiten akibat caching jika otorisasi diberikan kurang dari tiga jam yang lalu.
Solusi: Berikan kebijakan AliyunHologresEncryptionDefaultRolePolicy ke akun tersebut. Lihat Mengkueri data MaxCompute terenkripsi.
Error format data dan kompatibilitas
Bukan file ORC
status { code: SERVER_INTERNAL_ERROR message: "hos_exception: Invalid argument: not an ORC file" }
Penyebab: Tabel eksternal Hologres tidak dapat mengakses tabel MaxCompute selama pemuatan aliran aktif karena data belum dalam format ORC.
Solusi: Tambahkan parameter GUC berikut sebelum pernyataan SQL Anda:
set hg_experimental_enable_access_odps_with_table_api = on;
set hg_experimental_enable_access_odps_orc_via_holo = off;
Ketidaksesuaian skema ORC untuk tipe DECIMAL
Open ORC file failed for schema mismatch. Reader schema
Penyebab: Format penyimpanan untuk DECIMAL dalam tabel ORC MaxCompute telah berubah, biasanya setelah menambahkan bidang DECIMAL baru atau perubahan konfigurasi canary.
Solusi:
-
Jalankan perintah berikut di MaxCompute dan impor ulang data:
set MaxCompute.storage.orc.enable.binary.decimal = false;
-
Atau ubah tipe
DECIMALmenjadiDOUBLEdi tabel MaxCompute dan refresh data.
Overflow timestamp
Timestamp overflow detected while converting timestamp from orc VectorBatch to arrow
Penyebab: Tabel MaxCompute berisi data TIMESTAMP yang dimuat melalui Tunnel dengan presisi nanodetik, yang tidak didukung oleh Hologres.
Solusi:
-
Ubah tipe
TIMESTAMPmenjadiDATETIMEdi MaxCompute. -
Atau upgrade instans Hologres Anda ke V1.1.70 atau lebih baru.
Evolusi skema tidak diaktifkan
failed to import foreign schema: Failed to get MaxCompute table: Not enable schema evolution
Penyebab: Skema tabel MaxCompute telah dimodifikasi (kolom ditambah atau dihapus), sehingga memasuki status evolusi skema yang tidak dapat dibaca oleh Hologres.
Solusi:
-
Upgrade instans Hologres Anda ke V1.3 atau lebih baru.
-
Jalankan IMPORT FOREIGN SCHEMA untuk merefresh skema tabel eksternal setelah perubahan skema tabel MaxCompute.
-
Jika error tetap muncul, buat ulang tabel MaxCompute lalu buat ulang tabel eksternal.
Tabel transaksional (ACID) tidak didukung
failed to import foreign schema: Failed to get MaxCompute table: Not enable acid table
Penyebab: Tabel MaxCompute adalah tabel transaksional (ACID).
Solusi: Ubah tabel tersebut menjadi tabel MaxCompute standar. Tabel transaksional tidak didukung.
Error batas sumber daya
Batas partisi terlampaui (512)
Specified partitions count in MaxCompute table: exceeds the limitation of 512
atau:
Build desc failed: Exceeds the partition limitation of 512, current match {n} partitions
Penyebab: Hologres memindai maksimal 512 partisi per kueri tabel eksternal secara default.
Untuk tabel MaxCompute dengan partisi multi-level, jumlah partisi ditentukan oleh unit partisi paling granular.
Solusi:
-
Tambahkan filter partisi ke kueri Anda untuk mengurangi jumlah partisi yang dipindai.
-
Impor data ke tabel internal, yang tidak memiliki batas partisi. Impor data dari MaxCompute menggunakan SQL.
-
Sesuaikan batas partisi dengan parameter GUC. Nilai default adalah 512 dan maksimum adalah 1024. Menetapkan nilai terlalu tinggi dapat menurunkan performa kueri.
-- Untuk V1.1 dan lebih baru:
set hg_foreign_table_max_partition_limit = 128;
-- Untuk V0.10:
set hg_experimental_foreign_table_max_partition_limit = 128;
Batas ukuran pemindaian terlampaui (200 GB)
Build desc failed: Exceeds the scan limitation of 200 GB, current scan {n} GB
Penyebab: Hologres membatasi pemindaian data tabel eksternal hingga 200 GB per kueri secara default. Ini berlaku untuk partisi yang dipindai, bukan total data yang disimpan.
Solusi:
-
Tambahkan filter untuk mengurangi partisi yang diakses, sehingga data yang dipindai tetap di bawah 200 GB.
-
Impor data ke Hologres sebelum mengkueri. Impor data dari MaxCompute menggunakan SQL.
-
(Tidak disarankan) Tingkatkan batas pemindaian. Ganti nilai dengan ukuran yang diperlukan dalam GB. Meningkatkan batas ini secara berlebihan dapat menurunkan performa dan menyebabkan error OOM (kehabisan memori).
set hg_experimental_foreign_table_max_scan_size = 400;
Sumber daya habis (server sibuk)
Request denied, may caused by server busy
Penyebab: Sumber daya kueri tabel eksternal telah habis.
Solusi:
-
Optimalkan SQL Anda. Lihat Mengoptimalkan performa kueri untuk tabel eksternal MaxCompute.
-
Kurangi DOP (Degree of Parallelism). DOP mengontrol konkurensi untuk membaca data tabel eksternal per node eksekusi. Default: 256, rentang: 0–1024. Terlalu tinggi berisiko menyebabkan error OOM; terlalu rendah menurunkan performa.
-- Periksa DOP saat ini:
show hg_foreign_table_executor_max_dop;
-- Atur ke setengah nilai saat ini (contoh):
set hg_foreign_table_executor_max_dop = 18;
-
Impor data ke tabel internal. Tabel internal mendukung indeks untuk performa kueri yang lebih baik. Impor data dari MaxCompute menggunakan SQL.
Batas memori terlampaui selama impor
Query executor exceeded total memory limitation {limit}: {used} bytes used
Penyebab: Kueri melebihi batas memori komputasi. Setiap node Hologres memiliki memori 64 GB, yang dibagi kira-kira menjadi tiga bagian: komputasi, caching, dan metadata.
Solusi: Coba langkah-langkah berikut secara berurutan:
-
Periksa rencana eksekusi. Jalankan
explain analyze <sql>;untuk meninjau jumlah baris. Jika beberapa tabel tidak memiliki statistik terbaru, pengoptimal mungkin memilih urutan join yang suboptimal. Jalankananalyze <tablename>;pada semua tabel yang terlibat untuk memperbarui statistik. -
Kurangi ukuran batch. Tabel lebar atau baris besar dapat menghabiskan memori per batch. Kurangi jumlah baris per batch:
set hg_experimental_query_batch_size = 1024; -- Default: 8192 insert into holo_table select * from mc_table; -
Kurangi DOP impor. Parameter
hg_foreign_table_executor_max_dopsecara default sama dengan jumlah CU instans. Tetapkan nilai yang lebih kecil selama impor:set hg_foreign_table_executor_max_dop = 8; insert into holo_table select * from mc_table; -
Hapus duplikasi data. Dengan
insert on conflict, duplikasi berlebihan meningkatkan tekanan memori. Hapus duplikasi di MaxCompute sebelum impor. Gabungkan beberapa baris data menjadi satu baris. -
Upgrade Hologres. Mulai V1.1.24, Hologres secara dinamis menyesuaikan alokasi memori untuk komputasi. Peningkatan instans.
-
Tingkatkan kapasitas instans. Jika semua pendekatan lain gagal, tambahkan sumber daya instans. Peningkatan.
Fitur yang tidak didukung
Tipe tabel CFile tidak didukung
query next from foreign table executor failed, GetRecordBatch() is not implemented
Penyebab: Tabel MaxCompute adalah tabel tipe CFile, yang tidak didukung oleh Hologres melalui jalur akses default.
Solusi: Tambahkan parameter GUC berikut sebelum pernyataan SQL Anda:
set hg_experimental_enable_access_odps_with_table_api = on;
Data Streaming Tunnel tidak dapat dibaca
Query next from foreign table executor failed, not implemented
Penyebab: Tabel MaxCompute dimuat melalui Streaming Tunnel (tunnel.createStreamUploadSession). Diperlukan parameter GUC khusus untuk membaca data ini.
Solusi (Hologres V1.3 dan lebih baru): Tambahkan parameter berikut sebelum kueri Anda:
set hg_experimental_enable_access_odps_with_table_api = on;
set hg_experimental_enable_access_odps_orc_via_holo = off;
Solusi sementara untuk versi sebelum V1.3: Hentikan pemuatan streaming di MaxCompute, lalu gabungkan data:
set odps.merge.task.mode = sql;
set odps.merge.lock.expire.time = 0;
ALTER TABLE tablename [PARTITION] MERGE SMALLFILES;
Tampilan MaxCompute tidak didukung
Build desc failed: failed to check permission: Currently not supported table type "view"
Penyebab: Hologres tidak mendukung tampilan MaxCompute sebagai tabel eksternal.
Error koneksi dan infrastruktur
Kegagalan pengambilan metadata (Pangu)
Build desc failed: failed to get foreign table split: MaxCompute-0010000: System internal error - get input pangu dir meta fail
Penyebab: Konfigurasi Hologres untuk membaca dari MaxCompute belum diperbarui tepat waktu.
Solusi: Tunggu beberapa menit lalu coba lagi. Jika masalah berlanjut, hubungi dukungan teknis.
Koneksi RPC ditutup akibat file kecil
Build desc failed: failed to get foreign table split: ERPC_ERROR_CONNECTION_CLOSED
Penyebab: Tabel MaxCompute memiliki terlalu banyak file kecil, sehingga permintaan metadata melebihi batas RPC 1 GB.
Solusi:
-
Gabungkan file kecil di MaxCompute:
set MaxCompute.merge.task.mode = sql;
set MaxCompute.merge.lock.expire.time = 0;
ALTER TABLE <tablename> [PARTITION] MERGE SMALLFILES;
-
Upgrade ke Hologres V0.10.21 atau lebih baru, di mana masalah ini telah diperbaiki. Peningkatan instans.
-
Jika volume data kecil, impor data ke Hologres. Hubungi dukungan teknis MaxCompute jika masalah berlanjut.
Kegagalan akses data MaxCompute terenkripsi
status { code: SERVER_INTERNAL_ERROR message: "hos_exception: IO error: Failed to execute pangu open normal file, err: PanguParameterInvalidException" }
Penyebab: HQE tidak dapat mengakses data MaxCompute terenkripsi di Pangu.
Solusi: Alihkan mesin eksekusi ke SQE, yang dapat mengakses data terenkripsi. Tetapkan ini di tingkat database (berlaku untuk koneksi baru):
ALTER DATABASE <dbname> SET hg_experimental_enable_access_odps_orc_via_holo = false;
Atau di tingkat session:
SET hg_experimental_enable_access_odps_orc_via_holo = false;
Penyetelan performa
Perlambatan kueri setelah evolusi skema tabel eksternal
Penyebab: Hologres secara default menggunakan HQE untuk mempercepat kueri tabel eksternal. Setelah perubahan skema MaxCompute, Hologres beralih ke SQE, yang lebih lambat.
Solusi:
-
Kueri
hologres.hg_query_loguntuk mengidentifikasi kueri lambat. -
Periksa bidang
engine_type. Jika menunjukkanSQE, penurunan performa disebabkan oleh fallback mesin. -
Buat ulang tabel eksternal yang terpengaruh dengan skema terbaru di Hologres.
Kueri tabel eksternal lambat (umum)
Optimalkan pernyataan SQL Anda. Mengoptimalkan performa kueri untuk tabel eksternal MaxCompute.
Referensi cepat parameter GUC
Parameter GUC yang dirujuk dalam dokumen ini:
|
Parameter |
Default |
Rentang |
Versi min. |
Tujuan |
|
|
-- |
on/off |
V1.3 |
Akses tabel tipe CFile dan tabel yang dimuat streaming |
|
|
on |
on/off |
-- |
Beralih dari mesin HQE ke SQE untuk tabel eksternal. Atur ke |
|
|
512 |
1--1024 |
V1.1 |
Jumlah maksimum partisi yang dipindai per kueri |
|
|
512 |
-- |
V0.10 |
Versi lawas dari |
|
|
200 (GB) |
-- |
-- |
Ukuran maksimum pemindaian data per kueri |
|
|
256 |
0--1024 |
-- |
DOP untuk membaca dari tabel eksternal di satu node |
|
|
8192 |
-- |
-- |
Jumlah baris yang dibaca per batch selama impor |
|
|
-- |
on/off |
-- |
Paksa jalur eksekusi SQE (versi lama) |
|
|
-- |
on/off |
-- |
Paksa jalur eksekusi SQE (versi baru) |
|
|
-- |
on/off |
-- |
Aktifkan query master untuk solusi sementara izin tingkat kolom |
|
|
-- |
nama proyek |
V0.8 |
Tetapkan konteks proyek MaxCompute untuk akses lintas proyek |
|
|
-- |
nama proyek |
V0.7 |
Versi lawas dari |