All Products
Search
Document Center

:FAQ tentang lakehouse dan tabel eksternal

Last Updated:Mar 27, 2026

Topik ini menjawab pertanyaan umum mengenai tabel eksternal.

Kategori

FAQ

Tabel eksternal Object Storage Service (OSS)

Tabel eksternal Hologres

Bagaimana cara mengatasi error ODPS-0130071 saat langsung membaca data Hologres dari MaxCompute?

Masalah performa

Bagaimana cara menangani job SQL yang lambat pada tabel eksternal?

Error ODPS-0123131: Membaca tipe DATETIME dengan extractor kustom

  • Masalah

    Saat menggunakan extractor kustom untuk membaca data tidak terstruktur, error berikut muncul jika bidang data bertipe DATETIME, seperti 2019-11-11 06:43:36.

    FAILED: ODPS-0123131:User defined function exception - Traceback:
    java.lang.IllegalArgumentException
        at java.sql.Date.valueOf(Date.java:143)
        at com.aliyun.odps.udf.example.text.TextExtractor.textLineToRecord(TextExtractor.java:194)
        at com.aliyun.odps.udf.example.text.TextExtractor.extract(TextExtractor.java:153)
        at com.aliyun.odps.udf.ExtractorHandler.extract(ExtractorHandler.java:120)       
  • Penyebab

    Pada kode Date.valueOf(parts), fungsi java.sql.Date.valueOf() hanya mendukung parameter STRING dalam format "yyyy-[m]m-[d]d" dan tidak mendukung parameter DATETIME.

  • Resolusi

    1. Tambahkan dependensi Joda-Time ke proyek Anda dan impor kelas yang diperlukan ke dalam kode.

      -- Dependency.
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10</version>
      </dependency> 
      -- Informasi impor.
      import org.joda.time.DateTime;
      import org.joda.time.format.DateTimeFormat;                           
    2. Gunakan fungsi DateTimeFormat.forPattern() untuk mengonversi nilai tipe DATETIME ke tipe STRING agar dapat dibaca.

      record.setDate(index, new Date(DateTime.parse(parts[i], DateTimeFormat.forPattern("yyyy-MM-dd HH:mi:ss")).getMillis()));                           

    Contoh:

    1. Unggah file JAR proyek extractor Anda menggunakan client MaxCompute.

      add jar /Users/gary/big_data/odps/text_extractor/target/text_extractor-1.0-SNAPSHOT.jar      

      /Users/gary/big_data/odps/text_extractor/target/text_extractor-1.0-SNAPSHOT.jar adalah jalur penyimpanan lokal untuk file JAR yang dihasilkan.

    2. Unggah file JAR pihak ketiga Joda-Time menggunakan client MaxCompute.

      add jar /Users/gary/.m2/repository/joda-time/joda-time/2.10/joda-time-2.10.jar                         

      /Users/gary/.m2/repository/joda-time/joda-time/2.10/joda-time-2.10.jar adalah jalur lokal file JAR pihak ketiga Joda-Time.

    3. Unggah data uji ke direktori yang ditentukan di OSS. Untuk file bernama video_play_log.txt, data sampelnya sebagai berikut.

      5c661071dba64d5080c91da085ff1073^Music-Click-Fast forward^26.12.XX.XX^2019-11-11 06:43:36                           
    4. Baca data dari tabel eksternal.

      select * from <project_name>.video_play_log;
      +------+-------+---+----------------+
      | uuid  | action  | ip  | time      |
      +------+-------+---+----------------+
      | 5c661071dba64d5080c91da085ff1073 | Music-Click-Fast forward | 26.12.XX.XX | 2019-11-11 06:43:36 |
      +------+-------+---+----------------+     

Kehabisan memori pada UDF yang mengakses tabel eksternal OSS

  • Masalah

    Saat menggunakan UDF untuk mengakses tabel eksternal OSS, terjadi error kehabisan memori meskipun UDF tersebut lolos pengujian lokal.

    FAILED: ODPS-0123131:User defined function exception - Traceback:
    java.lang.OutOfMemoryError: Java heap space        

    Setelah mengatur parameter berikut, waktu proses meningkat, tetapi error tetap muncul.

    set odps.stage.mapper.mem = 2048; 
    set odps.stage.mapper.jvm.mem = 4096;       
  • Penyebab

    Tabel eksternal berisi terlalu banyak file objek, yang mengonsumsi memori dalam jumlah besar. Selain itu, tidak ada partisi yang dikonfigurasi.

  • Resolusi

    • Kueri jumlah data yang lebih kecil.

    • Gunakan partisi untuk mengurangi jumlah data yang dipindai dalam setiap kueri.

Error: Inline data exceeds maximum allowed size

  • Masalah

    Error Inline data exceeds the maximum allowed size terjadi saat memproses data di Object Storage Service (OSS).

  • Penyebab

    Saat MaxCompute menulis data ke tabel eksternal OSS, sistem mungkin mencoba membuat satu file tunggal yang melebihi batas ukuran operasional.

  • Penyelesaian

    Atur properti berikut untuk mengontrol rencana eksekusi. Hal ini memastikan bahwa file individual yang ditulis ke tabel eksternal OSS tidak melebihi batas ukuran.

    -- Atur jumlah data yang dibaca oleh setiap mapper. Satuan: MB.
    SET odps.sql.mapper.split.size=256; 
    -- Atur jumlah worker pada fase reduce.
    SET odps.stage.reducer.num=100; 

Membaca data JSON menggunakan tabel eksternal OSS

Untuk petunjuknya, lihat Membaca data JSON menggunakan tabel eksternal OSS.

Menggabungkan file kecil dengan tabel eksternal OSS

Gunakan log Logview untuk memeriksa apakah operator terakhir dalam rencana eksekusi SQL adalah Reducer atau Joiner. Jika operator tersebut adalah Reducer, eksekusi pernyataan set odps.stage.reducer.num=1;. Jika operator tersebut adalah Joiner, eksekusi pernyataan set odps.stage.joiner.num=1;.

Error ODPS-0130071: Membaca data Hologres dari MaxCompute

  • Masalah

    Saat langsung membaca data dari Hologres, error "ODPS-0130071 Failed to split to equal size...max count: 7777" dilaporkan. 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

    Error ini terjadi karena strategi pemisahan mapper default MaxCompute (volume data masukan / split.size = 256 MB) menyebabkan jumlah mapper konkuren melebihi batas maksimum 7.777.

    Catatan

    Batas ini mencegah pengguna mengirimkan job yang menghasilkan jumlah mapper sangat besar, yang dapat memengaruhi stabilitas Hologres atau koneksi jaringan.

  • Penyelesaian

    Anda dapat mengatur parameter berikut untuk mengatasi error tersebut.

    -- Tingkatkan batas konkurensi mapper. Nilai maksimum adalah 10.000.
    SET odps.external.holo.mapper.instances=10000; 
    -- Atur konkurensi task dengan meningkatkan ukuran split. Nilai maksimum adalah 512 MB.
    SET odps.sql.mapper.split.size=512; 

Job SQL lambat pada tabel eksternal

Job SQL pada tabel eksternal bisa lambat karena beberapa alasan umum:

  • Pembacaan lambat file terkompresi GZ dari tabel eksternal OSS

    • Masalah

      Membaca file terkompresi besar (misalnya file GZ 200 GB) dari tabel eksternal OSS berjalan lambat.

    • Penyebab

      Job berjalan lambat karena format terkompresi seperti GZ tidak dapat dipisah (non-splittable), sehingga memaksa MaxCompute hanya menggunakan satu mapper.

    • Penyelesaian

      • Untuk meningkatkan performa, pisahkan file terkompresi besar tersebut menjadi beberapa file kecil di OSS. Hal ini memungkinkan MaxCompute menggunakan beberapa mapper secara paralel, yang meningkatkan throughput baca.

        -- Mengatur ukuran split data untuk setiap mapper dalam satuan MB.
        SET odps.sql.mapper.split.size=256;       
      • Untuk data tidak terstruktur, periksa apakah jalur tabel eksternal Object Storage Service (OSS) hanya berisi satu file. Jika hanya ada satu file, hanya satu Mapper yang dihasilkan karena data tidak terstruktur yang terkompresi tidak dapat dipisah. Hal ini memperlambat pemrosesan. Pisahkan file OSS besar tersebut menjadi file-file kecil di jalur tabel eksternal OSS. Langkah ini meningkatkan jumlah Mapper dan mempercepat kecepatan baca.

  • Kueri data lambat pada tabel eksternal MaxCompute menggunakan SDK

    • Masalah

      Kueri data dari tabel eksternal MaxCompute menggunakan SDK berjalan lambat.

    • Resolusi

      Tabel eksternal hanya mendukung pemindaian tabel penuh (full table scan), yang bisa lambat. Kami menyarankan Anda menggunakan tabel internal MaxCompute sebagai gantinya.

  • Kueri data lambat dari tabel eksternal Tablestore

    • Masalah

      Kueri pada tabel eksternal Tablestore jauh lebih lambat dibandingkan kueri ekuivalen pada tabel internal MaxCompute yang berisi data yang sama.

    • Penyelesaian

      Perbedaan performa ini bersifat ekspektasi karena kueri tabel eksternal melibatkan pembacaan data jarak jauh (remote). Untuk performa yang lebih baik, impor data tersebut ke tabel internal MaxCompute terlebih dahulu, lalu jalankan kueri Anda.

Error "Couldn't connect to server" pada tabel eksternal OSS

  • Masalah

    Saat membaca data dari tabel eksternal OSS, error berikut dilaporkan: ODPS-0123131:User defined function exception - common/io/oss/oss_client.cpp(95): OSSRequestException: req_id: , http status code: -998, error code: HttpIoError, message: Couldn't connect to server.

  • Penyebab

    • Alasan 1: Saat membuat tabel eksternal OSS, titik akhir publik digunakan untuk oss_endpoint di oss_location, bukan titik akhir internal.

    • Penyebab 2: Saat membuat tabel eksternal OSS, oss_endpoint yang ditentukan dalam jalur oss_location termasuk wilayah yang berbeda.

  • Penyelesaian

    • Untuk Penyebab 1:

      Periksa parameter oss_location dalam pernyataan CREATE TABLE untuk tabel eksternal OSS. Jika oss_endpoint merupakan titik akhir publik, ubah menjadi titik akhir internal. Untuk informasi lebih lanjut mengenai parameter, lihat Deskripsi parameter.

      Sebagai contoh, jika Anda berada di wilayah Indonesia (Jakarta) dan menggunakan endpoint oss://oss-ap-southeast-5.aliyuncs.com/<bucket>/.... untuk membuat tabel eksternal, ubahlah ke titik akhir internal yang sesuai: oss://oss-ap-southeast-5-internal.aliyuncs.com/<bucket>/.....

    • Untuk Penyebab 2:

      Verifikasi bahwa oss_endpoint dalam parameter oss_location pernyataan CREATE TABLE untuk tabel eksternal OSS adalah endpoint wilayah yang ingin Anda akses. Untuk informasi lebih lanjut mengenai nama domain jaringan klasik OSS, lihat Wilayah dan Titik Akhir.

Error "Network is unreachable (connect failed)" saat pembuatan tabel

  • Masalah

    Saat membuat tabel eksternal untuk Object Storage Service (OSS), error berikut dilaporkan:ODPS-0130071:[1,1] Semantic analysis exception - external table checking failure, error message: Cannot connect to the endpoint 'oss-cn-beijing.aliyuncs.com': Connect to bucket.oss-cn-beijing.aliyuncs.com:80 [bucket.oss-cn-beijing.aliyuncs.com] failed: Network is unreachable (connect failed).

  • Penyebab

    Saat membuat tabel eksternal OSS, oss_endpoint dalam alamat oss_location menggunakan titik akhir publik, bukan titik akhir internal.

  • Penyelesaian

    Periksa pernyataan CREATE TABLE untuk tabel eksternal OSS guna memverifikasi bahwa oss_endpoint yang ditentukan dalam parameter oss_location adalah titik akhir internal. Jika berupa titik akhir publik, ubahlah menjadi titik akhir internal. Untuk informasi lebih lanjut mengenai parameter, lihat Deskripsi parameter.

    Sebagai contoh, di wilayah Tiongkok (Beijing), jika Anda menggunakan endpoint oss://oss-cn-beijing.aliyuncs.com/<bucket>/.... untuk membuat tabel eksternal, ubahlah ke titik akhir internal yang sesuai oss://oss-cn-beijing-internal.aliyuncs.com/<bucket>/.....