全部产品
Search
文档中心

DataWorks:Kembangkan node ODPS SQL

更新时间:Nov 11, 2025

DataWorks menyediakan node ODPS SQL yang dapat Anda gunakan untuk menjadwalkan tugas MaxCompute SQL secara berkala serta mengintegrasikannya dengan jenis node lain dalam penjadwalan bersama. Tugas MaxCompute SQL menggunakan sintaks mirip SQL dan cocok untuk skenario pemrosesan terdistribusi dengan volume data besar (terabyte) yang tidak memerlukan kinerja real-time tinggi. Topik ini menjelaskan cara mengembangkan tugas SQL di DataWorks dan hal-hal penting yang perlu diperhatikan.

Pengenalan node

ODPS SQL digunakan untuk memproses dan mengkueri data di MaxCompute. ODPS SQL mendukung operasi SQL umum, seperti SELECT, INSERT, UPDATE, dan DELETE, serta sintaks dan fungsi khusus MaxCompute. Dengan ODPS SQL, Anda dapat menulis pernyataan mirip SQL untuk mengkueri dan memproses data tanpa perlu menulis logika pemrosesan data yang kompleks. Untuk informasi lebih lanjut tentang sintaks SQL, lihat Ikhtisar SQL.

Batasan

Tabel berikut menjelaskan batasan dalam mengembangkan node ODPS SQL di DataWorks.

Kategori

Deskripsi

Penggunaan komentar

Mendukung komentar satu baris (-- Isi komentar). Komentar multi-baris (/* Isi komentar */) tidak didukung.

Untuk informasi lebih lanjut, lihat Komentar SQL MaxCompute.

Batasan berikut juga berlaku untuk komentar.

  • Anda tidak dapat menambahkan komentar setelah pernyataan kata kunci, seperti SET atau USE.

  • Tanda titik koma (;) tidak didukung dalam komentar.

  • Anda tidak dapat menambahkan komentar di akhir pernyataan yang telah selesai. Titik koma (;) setelah pernyataan SQL menunjukkan bahwa pernyataan tersebut telah selesai.

Pengiriman SQL

ODPS SQL tidak mendukung menjalankan pernyataan SET atau USE secara terpisah. Pernyataan tersebut harus dieksekusi bersama dengan pernyataan SQL tertentu.

Pengembangan SQL

Ukuran kode SQL tidak boleh melebihi 128 KB. Jumlah perintah SQL tidak boleh melebihi 200.

Hasil kueri

Hanya pernyataan SQL yang dimulai dengan SELECT atau WITH yang dapat menghasilkan set hasil terformat.

Hasil kueri memiliki batasan berikut:

  • Jika hasil kueri memiliki lebih dari 10.000 baris, maksimal 10.000 baris yang dapat ditampilkan.

  • Jika ukuran hasil kueri melebihi 10 MB, kesalahan `Result is too large, exceed the limit size: 10MB` akan dilaporkan.

Catatan

Jika Anda menghadapi batasan pada hasil kueri, Anda dapat mengunduh hasil tersebut ke komputer lokal dengan salah satu cara berikut:

Tindakan pencegahan

  • Pastikan akun yang digunakan untuk menjalankan tugas ODPS SQL memiliki izin yang diperlukan pada proyek MaxCompute terkait. Untuk informasi lebih lanjut, lihat Izin DataWorks pada MaxCompute dan Izin MaxCompute.

  • Eksekusi tugas SQL MaxCompute mengonsumsi sumber daya kuota. Jika suatu tugas berjalan lama, buka konsol MaxCompute untuk memeriksa konsumsi sumber daya kuota dan pastikan tersedia sumber daya yang cukup untuk menjalankan tugas tersebut. Untuk informasi lebih lanjut, lihat Sumber daya komputasi - Manajemen kuota.

  • Saat mengembangkan tugas node ODPS SQL, Anda harus membungkus parameter khusus, seperti alamat OSS, dengan tanda kutip ganda. Jika tidak, tugas tidak dapat diurai dan dieksekusi.

  • Saat menjalankan pernyataan yang mengandung kata kunci, seperti SET dan USE, di lingkungan berbeda di DataWorks, urutan eksekusinya berbeda.

    • Di DataStudio: Semua pernyataan kata kunci (SET dan USE) dalam kode tugas saat ini digabungkan dan dieksekusi sebelum semua pernyataan SQL lainnya.

    • Di lingkungan penjadwalan: Pernyataan dieksekusi sesuai urutan penulisannya.

    Asumsikan kode yang didefinisikan dalam node adalah sebagai berikut.

    SET a=b;
    CREATE TABLE name1(id string);
    SET c=d;
    CREATE TABLE name2(id string);

    Tabel berikut menjelaskan urutan eksekusi di lingkungan berbeda.

    Pernyataan SQL yang dieksekusi

    DataStudio

    Lingkungan penjadwalan

    Pernyataan SQL pertama

    SET a=b;
    SET c=d;
    CREATE TABLE name1(id string);
    SET a=b;
    CREATE TABLE name1(id string);

    Pernyataan SQL kedua

    SET a=b;
    SET c=d;
    CREATE TABLE name2(id string);
    SET c=d;
    CREATE TABLE name2(id string);

Edit kode: Contoh sederhana

Perintah SQL

Perintah SQL MaxCompute menggunakan sintaks yang mirip dengan SQL standar. Perintah ini mendukung pernyataan Data Definition Language (DDL), Data Manipulation Language (DML), dan Data Query Language (DQL), serta perintah khusus MaxCompute. Untuk informasi lebih lanjut tentang persyaratan sintaks dan contoh penggunaan setiap perintah SQL, lihat Ikhtisar SQL. Contoh berikut menunjukkan cara mengembangkan dan menjalankan perintah SQL sederhana.

Catatan
  • Saat menggunakan fungsi ekstensi MaxCompute V2.0 yang melibatkan tipe data baru, Anda harus menambahkan SET odps.sql.type.system.odps2=true; sebelum pernyataan SQL fungsi tersebut. Kemudian, kirimkan pernyataan dan fungsi tersebut bersama-sama untuk mengaktifkan tipe data baru. Untuk informasi lebih lanjut tentang tipe data V2.0, lihat Edisi tipe data (V2.0).

  • DataWorks menyediakan parameter penjadwalan yang memungkinkan Anda meneruskan parameter secara dinamis ke kode dalam skenario penjadwalan. Di node ODPS SQL, Anda dapat mendefinisikan variabel dalam format ${Nama Variabel} di dalam kode. Anda kemudian dapat memberikan nilai ke variabel tersebut di bagian Parameters pada tab Properties. Untuk informasi lebih lanjut tentang format parameter penjadwalan yang didukung, lihat Format parameter penjadwalan yang didukung.

  • Buat Tabel

    Anda dapat menggunakan pernyataan `CREATE TABLE` untuk membuat tabel non-partisi, tabel partisi, tabel eksternal, dan tabel terkluster. Untuk informasi lebih lanjut, lihat CREATE TABLE. Kode berikut memberikan contohnya:

    -- Buat tabel partisi bernama students.
    CREATE TABLE if NOT EXISTS students
    ( id BIGINT,
      name STRING,
      age BIGINT,
      birth DATE)
    partitioned BY (gender STRING); 
  • Masukkan Data

    Anda dapat menggunakan pernyataan `INSERT INTO` atau `INSERT OVERWRITE` untuk memasukkan atau memperbarui data di tabel tujuan. Untuk informasi lebih lanjut, lihat Masukkan atau timpa data (INSERT INTO | INSERT OVERWRITE). Kode berikut memberikan contohnya:

    -- Masukkan data.
    INSERT INTO students PARTITION(gender='boy') VALUES (1,'Zhang San',15,DATE '2008-05-15') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (2,'Li Si',17,DATE '2006-07-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (3,'Li Xia',20,DATE '2003-04-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (4,'Wang Lan',21,DATE '2002-01-08') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (5,'Wang Wu',17,DATE '2006-09-12') ;
    Penting

    Hindari menggunakan pernyataan `INSERT INTO` untuk memasukkan data karena hal ini dapat menyebabkan duplikasi data yang tidak diinginkan. Kami menyarankan Anda menggunakan pernyataan `INSERT OVERWRITE` sebagai gantinya. Untuk informasi lebih lanjut, lihat Masukkan atau timpa data.

  • Kueri Data

    Anda dapat menggunakan pernyataan `SELECT` untuk melakukan operasi seperti kueri bersarang, kueri kelompok, dan pengurutan. Untuk informasi lebih lanjut, lihat Sintaks SELECT. Kode berikut memberikan contohnya:

    -- Aktifkan pemindaian tabel penuh. Pengaturan ini hanya berlaku untuk sesi saat ini.
    SET odps.sql.allow.fullscan=true; 
    
    -- Kueri informasi semua siswa laki-laki dan urutkan hasil berdasarkan ID secara menaik.
    SELECT * FROM students WHERE gender='boy' ORDER BY id;
    Catatan

    Secara default, pengguna Resource Access Management (RAM) tidak memiliki izin untuk mengkueri data dari tabel produksi. Untuk mendapatkan izin tersebut, Anda harus mengajukannya di Security Center. Untuk informasi lebih lanjut tentang izin database preset dan kontrol akses MaxCompute di DataWorks, lihat Kontrol izin data MaxCompute. Untuk informasi lebih lanjut tentang cara memberikan izin menggunakan perintah MaxCompute, lihat Kelola izin pengguna menggunakan perintah.

Fungsi SQL

MaxCompute mendukung fungsi bawaan dan user-defined function (UDF) untuk pengembangan dan analisis data. Untuk informasi lebih lanjut tentang fungsi bawaan, lihat Fungsi bawaan. Untuk informasi lebih lanjut tentang UDF, lihat UDF MaxCompute. Contoh berikut menunjukkan cara menggunakan fungsi SQL sederhana.

  • Fungsi bawaan: Fungsi bawaan telah dipreset di MaxCompute dan dapat dipanggil langsung. Misalnya, berdasarkan tabel di atas, Anda dapat menggunakan fungsi `dateadd` untuk mengubah nilai-nilai dalam kolom `birth` berdasarkan interval tertentu. Kode berikut memberikan contohnya:

    -- Aktifkan pemindaian tabel penuh. Pengaturan ini hanya berlaku untuk sesi saat ini.
    SET odps.sql.allow.fullscan=true; 
    SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;
  • User-defined functions (UDFs): Untuk menggunakan UDF, Anda harus menulis kode fungsi, mengunggah kode tersebut sebagai sumber daya, dan mendaftarkan fungsi tersebut. Untuk informasi lebih lanjut, lihat Buat dan gunakan UDF.

Menjalankan dan hasil

  • Hasil eksekusi ditampilkan dalam buku kerja. Anda dapat melakukan operasi pada hasil tersebut di DataWorks, membuka hasilnya di buku kerja, atau menyalin dan menempel kontennya ke file Excel lokal. Untuk informasi lebih lanjut, lihat Proses debugging tugas.

    Catatan

    Karena penyesuaian informasi zona waktu Tiongkok yang dirilis oleh Organisasi Internasional untuk Standardisasi, selisih waktu mungkin terjadi untuk periode tertentu saat Anda menjalankan pernyataan SQL terkait di DataWorks. Hal ini mencakup selisih 5 menit 52 detik untuk tanggal dan waktu antara tahun 1900 hingga 1928, serta selisih 9 detik untuk tanggal dan waktu sebelum tahun 1900.

  • Log eksekusi: Anda dapat mengklik tab Running Log untuk melihat detail Logview. Untuk informasi lebih lanjut, lihat Gunakan Logview V2.0 untuk melihat informasi eksekusi pekerjaan.

  • Hasil:

    • Kueri informasi semua siswa laki-laki dan urutkan hasil berdasarkan ID secara menaik.

      +------------+------------+------------+------------+------------+
      | id         | name       | age        | birth      | gender     |
      +------------+------------+------------+------------+------------+
      | 1          | Zhang San  | 15         | 2008-05-15 | boy        |
      | 2          | Li Si      | 17         | 2006-07-20 | boy        |
      | 5          | Wang Wu    | 17         | 2006-09-12 | boy        |
      +------------+------------+------------+------------+------------+
    • Ubah nilai dalam kolom birth berdasarkan satuan dan interval tertentu.

      +------------+------------+------------+------------+---------------+
      | id         | name       | age        | birth      | birth_dateadd |
      +------------+------------+------------+------------+---------------+
      | 4          | Wang Lan   | 21         | 2002-01-08 | 2002-02-08    |
      | 3          | Li Xia     | 20         | 2003-04-20 | 2003-05-20    |
      | 2          | Li Si      | 17         | 2006-07-20 | 2006-08-20    |
      | 1          | Zhang San  | 15         | 2008-05-15 | 2008-06-15    |
      | 5          | Wang Wu    | 17         | 2006-09-12 | 2006-10-12    |
      +------------+------------+------------+------------+---------------+

    Di halaman hasil kueri, Anda dapat mengurutkan hasil berdasarkan bidang tertentu dan melakukan operasi seperti mengunduh hasilnya. Untuk informasi lebih lanjut, lihat Proses hasil kueri.

Edit kode: Contoh lanjutan

Topik berikut menyediakan contoh tugas ODPS SQL yang lebih kompleks:

FAQ

  • T: Mengapa tugas ODPS SQL saya membutuhkan waktu lama untuk dijalankan atau terjebak dalam status menunggu?

    J: Eksekusi tugas SQL MaxCompute mengonsumsi sumber daya kuota. Jika suatu tugas sedang menunggu sumber daya atau berjalan lama, buka konsol MaxCompute untuk memeriksa konsumsi sumber daya kuota dan pastikan tersedia sumber daya yang cukup untuk menjalankan tugas tersebut. Untuk informasi lebih lanjut, lihat Sumber daya komputasi - Manajemen kuota.

  • T: Mengapa saya menerima kesalahan "You have No privilege 'odps:xxxx' on xxxx" saat menjalankan tugas ODPS SQL?

    J: Kesalahan ini terjadi karena akun yang digunakan untuk menjalankan tugas ODPS SQL tidak memiliki izin yang diperlukan pada proyek MaxCompute terkait. Pastikan akun tersebut memiliki izin yang diperlukan. Untuk informasi lebih lanjut, lihat Izin MaxCompute.