全部产品
Search
文档中心

:FAQ tentang tabel eksternal

更新时间:Jul 06, 2025

Topik ini menjawab beberapa pertanyaan umum terkait tabel eksternal.

Kategori

FAQ

Tabel eksternal Object Storage Service (OSS)

Tabel eksternal Hologres

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

Kinerja

Apa yang harus saya lakukan jika pekerjaan SQL berjalan lambat berdasarkan tabel eksternal?

Apa yang harus saya lakukan jika muncul kesalahan ODPS-0123131 saat ekstraktor kustom membaca data tidak terstruktur yang berisi bidang data tipe DATETIME?

  • Deskripsi Masalah

    Saat ekstraktor kustom membaca data tidak terstruktur, pesan kesalahan 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

    Fungsi java.sql.Date.valueOf() dalam Date.valueOf(parts) pada posisi tertentu dari kode hanya mendukung parameter bertipe STRING, seperti "yyyy-[m]m-[d]d". Fungsi ini tidak mendukung parameter bertipe DATETIME.

  • Solusi

    1. Tambahkan dependensi Joda-Time dan impor informasi ke kode.

      -- Perkenalkan dependensi Joda-Time. 
      <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10</version>
      </dependency> 
      -- Tambahkan informasi impor. 
      import org.joda.time.DateTime;
      import org.joda.time.format.DateTimeFormat;                           
    2. Tambahkan fungsi DateTimeFormat.forPattern() untuk mengonversi bidang bertipe DATETIME menjadi 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 hasil pengemasan proyek ekstraktor di klien 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 direktori lokal untuk menyimpan file JAR yang dihasilkan.

    2. Unggah file JAR pihak ketiga Joda-Time di klien 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 direktori lokal untuk menyimpan file JAR pihak ketiga Joda-Time.

    3. Unggah data uji ke direktori yang ditentukan di OSS. Dalam contoh ini, nama file adalah video_play_log.txt. Data sampel:

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

      select * from <project_name>.video_play_log;

      Hasil yang diperoleh:

      +------+-------+---+----------------+
      | uuid  | action  | ip  | time      |
      +------+-------+---+----------------+
      | 5c661071dba64d5080c91da085ff1073 | Music-Click-Fast Forward | 26.12.04.68 | 2019-11-11 06:43:36 |
      +------+-------+---+----------------+     

Setelah saya mengunggah UDF yang lulus uji lokal ketika menggunakan MaxCompute untuk mengakses tabel eksternal OSS, terjadi kesalahan kelebihan memori. Apa yang harus saya lakukan?

  • Deskripsi Masalah

    Setelah mengunggah UDF yang lulus uji lokal menggunakan MaxCompute untuk mengakses tabel eksternal OSS, pesan kesalahan berikut muncul:

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

    Meskipun konfigurasi berikut telah ditambahkan, waktu proses meningkat tetapi kesalahan tetap ada.

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

    Tabel eksternal memiliki jumlah objek yang berlebihan, sehingga membutuhkan ruang memori besar. Selain itu, tidak ada partisi yang ditentukan untuk objek tersebut.

  • Solusi

    • Kueri sejumlah kecil data.

    • Tentukan partisi untuk objek guna mengurangi penggunaan memori.

Apa yang harus saya lakukan jika pesan kesalahan "Data inline melebihi ukuran maksimum yang diizinkan" muncul saat saya menggunakan tabel eksternal untuk memproses data OSS?

  • Deskripsi Masalah

    Saat MaxCompute memproses data OSS, pesan kesalahan Inline data melebihi ukuran maksimum yang diizinkan muncul.

  • Penyebab

    Penyimpanan OSS membatasi ukuran setiap objek. Jika ukuran objek melebihi 3 GB, kesalahan akan terjadi.

  • Solusi

    Ubah konfigurasi properti berikut untuk menyesuaikan rencana eksekusi. Properti ini digunakan untuk mengelola ukuran data yang dapat ditulis oleh setiap reducer ke tabel eksternal OSS, memastikan bahwa objek penyimpanan OSS tidak melebihi 3 GB dalam ukuran.

    set odps.sql.mapper.split.size=256; # Sesuaikan ukuran data yang dibaca oleh setiap mapper. Unit: MB. 
    set odps.stage.reducer.num=100; # Sesuaikan jumlah pekerja dalam fase reduce.

Bagaimana cara menggunakan tabel eksternal OSS untuk membaca data JSON di MaxCompute?

Untuk informasi lebih lanjut tentang cara membaca data JSON menggunakan tabel eksternal OSS di MaxCompute, lihat Baca data JSON dari tabel eksternal OSS di MaxCompute.

Bagaimana cara menggunakan tabel eksternal OSS untuk mengekspor beberapa file kecil menjadi satu file?

Periksa apakah reducer atau joiner digunakan pada langkah terakhir dari rencana eksekusi SQL di LogView logs. Jika reducer digunakan pada langkah terakhir, jalankan perintah set odps.stage.reducer.num=1;. Jika joiner digunakan pada langkah terakhir, jalankan perintah set odps.stage.joiner.num=1;.

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

  • Deskripsi Masalah

    Saat membaca data Hologres secara langsung, pesan kesalahan "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

    Saat MaxCompute membaca data Hologres secara langsung, strategi pemisahan Mapper default (ukuran data input/split.size sebesar 256 MB) digunakan. Hal ini menghasilkan jumlah Mapper yang melebihi batas maksimum 7777.

    Catatan

    Pembatasan ini diberlakukan untuk mencegah pengguna langsung mengirimkan tugas yang menghasilkan sejumlah besar Mapper, yang dapat memengaruhi stabilitas file Hologres atau koneksi jaringan.

  • Solusi

    Anda dapat menyelesaikan masalah ini dengan mengonfigurasi parameter berikut:

    SET odps.external.holo.mapper.instances=10000; --Tingkatkan batas atas konkurensi menjadi 10000.
    SET odps.sql.mapper.split.size=512; --Sesuaikan konkurensi tugas dengan meningkatkan ukuran split menjadi 512 MB.

Apa yang harus saya lakukan jika pekerjaan SQL berjalan lambat berdasarkan tabel eksternal?

Saat pekerjaan SQL berjalan berdasarkan tabel eksternal, pekerjaan tersebut mungkin berjalan lambat karena salah satu alasan berikut:

  • Pembacaan file kompresi GZIP yang lambat dari tabel eksternal OSS

    • Deskripsi Masalah

      Tabel eksternal OSS telah dibuat. Sumber datanya adalah file kompresi GZIP di OSS dengan ukuran file 200 GB. Eksekusi berjalan lambat selama pembacaan data.

    • Penyebab

      Eksekusi pernyataan SQL lambat karena jumlah mapper yang digunakan untuk melakukan komputasi terlalu sedikit.

    • Solusi

      • Untuk data terstruktur, konfigurasikan parameter odps.sql.mapper.split.size untuk menyesuaikan jumlah data yang dibaca oleh satu mapper, mempercepat eksekusi pernyataan SQL.

        set odps.sql.mapper.split.size=256; # Sesuaikan ukuran data tabel yang dibaca oleh setiap mapper. Unit: MB.        
      • Untuk data tidak terstruktur, periksa apakah hanya satu file OSS yang tersimpan di direktori tabel eksternal OSS. Jika hanya satu file OSS yang ada, hanya satu mapper yang dapat dihasilkan karena data tidak terstruktur tidak dapat dipisah dalam mode kompresi. Hal ini mengakibatkan pemrosesan data yang lambat. Kami sarankan Anda membagi file OSS besar menjadi file kecil di direktori tabel eksternal OSS. Ini membantu meningkatkan jumlah mapper yang dihasilkan untuk membaca tabel eksternal dan meningkatkan kecepatan baca.

  • Pencarian data yang lambat di tabel eksternal menggunakan SDK MaxCompute

    • Deskripsi Masalah

      SDK MaxCompute mencari data di tabel eksternal dengan kecepatan rendah.

    • Solusi

      Tabel eksternal hanya mendukung pencarian penuh, sehingga kecepatan pencarian lambat. Kami sarankan Anda menggunakan tabel internal MaxCompute sebagai ganti tabel eksternal untuk pencarian.

  • Pencarian data yang lambat dari tabel eksternal Tablestore

    • Deskripsi Masalah

      Data diquery dari tabel eksternal Tablestore dengan kecepatan rendah. Jika data bisnis yang sama ditulis ke tabel eksternal Tablestore secara real-time dan secara berkala ditulis ke tabel internal MaxCompute, serta kedua tabel memiliki skema dan volume data yang sama, waktu yang diperlukan untuk mengquery data di tabel internal MaxCompute jauh lebih sedikit daripada waktu yang diperlukan untuk mengquery data di tabel eksternal Tablestore.

    • Solusi

      Data mungkin dikomputasi beberapa kali, menyebabkan query data lambat. Untuk meningkatkan efisiensi query dalam skenario ini, Anda dapat mengimpor data yang diperlukan ke tabel internal MaxCompute dan kemudian mengquery data di tabel internal. Metode ini lebih efisien daripada membaca data dari Tablestore setiap kali data diquery.

Apa yang harus saya lakukan jika "Tidak dapat terhubung ke server" kesalahan dilaporkan saat saya membaca data dari tabel eksternal OSS?

  • Deskripsi masalah

    Saat saya membaca data dari tabel eksternal OSS, kesalahan 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: Tidak dapat terhubung ke server.

  • Penyebab

    • Penyebab 1: oss_endpoint di parameter oss_location yang digunakan saat Anda membuat tabel eksternal OSS menunjuk ke endpoint publik, bukan endpoint internal.

    • Penyebab 2: oss_endpoint di parameter oss_location yang digunakan saat Anda membuat tabel eksternal OSS menunjuk ke endpoint di wilayah yang berbeda.

  • Solusi

    • Untuk Penyebab 1:

      Periksa oss_endpoint di parameter oss_location dari pernyataan pembuatan tabel eksternal Anda. Jika menggunakan endpoint publik, ubah ke endpoint internal yang sesuai. Untuk informasi parameter lebih lanjut, lihat Parameter.

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

    • Untuk Penyebab 2:

      Verifikasi bahwa oss_endpoint di parameter oss_location dalam pernyataan pembuatan tabel eksternal sesuai dengan endpoint wilayah tempat Anda ingin mengakses. Untuk informasi lebih lanjut tentang endpoint OSS di wilayah berbeda, lihat Wilayah dan endpoint.

Apa yang harus saya lakukan jika "Jaringan tidak terjangkau (koneksi gagal)" kesalahan dilaporkan saat saya membuat tabel eksternal OSS?

  • Deskripsi masalah

    Saat saya membuat tabel eksternal OSS, kesalahan berikut dilaporkan: ODPS-0130071:[1,1] Semantic analysis exception - external table checking failure, error message: Tidak dapat terhubung ke endpoint 'oss-cn-beijing.aliyuncs.com': Hubungi bucket.oss-cn-beijing.aliyuncs.com:80 [bucket.oss-cn-beijing.aliyuncs.com] gagal: Jaringan tidak terjangkau (koneksi gagal).

  • Penyebab

    Saat Anda membuat tabel eksternal OSS, oss_endpoint di parameter oss_location menunjuk ke endpoint publik, bukan endpoint internal.

  • Solusi

    Verifikasi bahwa oss_endpoint di parameter oss_location dalam pernyataan pembuatan tabel eksternal menunjuk ke endpoint internal. Jika endpoint publik digunakan, ubah ke endpoint internal. Untuk informasi parameter lebih lanjut, lihat Parameter.

    Sebagai contoh, jika Anda menggunakan oss://oss-cn-beijing.aliyuncs.com/<bucket>/.... untuk membuat tabel eksternal di wilayah China (Beijing), ubah ke endpoint internal oss://oss-cn-beijing-internal.aliyuncs.com/<bucket>/.....