All Products
Search
Document Center

DataWorks:Kembangkan tugas ODPS SQL

Last Updated:Apr 24, 2026

Tugas MaxCompute SQL menggunakan sintaks mirip SQL untuk pemrosesan data skala besar (tingkat TB) secara terdistribusi ketika hasil real-time tidak diperlukan. Topik ini menjelaskan cara mengembangkan tugas SQL di DataWorks dan menyediakan catatan penggunaan penting.

Pendahuluan

ODPS SQL digunakan untuk memproses dan mengkueri data di MaxCompute. Fitur ini 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 SQL Overview.

Batasan

Node ODPS SQL di DataWorks memiliki batasan berikut:

Kategori

Deskripsi

Penggunaan komentar

Hanya komentar satu baris dalam format -- isi komentar yang didukung. Komentar multi-baris dalam format /* isi komentar */ tidak didukung.

Untuk informasi lebih lanjut, lihat Komentar MaxCompute SQL.

Batasan tambahan berikut juga berlaku untuk komentar:

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

  • Anda tidak dapat menggunakan titik koma (;) dalam komentar.

  • Anda tidak dapat menambahkan komentar setelah pernyataan yang diakhiri dengan titik koma (;).

Pengiriman SQL

Anda tidak dapat menggunakan pernyataan SET atau USE sendirian. Anda harus mengeksekusinya bersama pernyataan SQL lainnya.

Pengembangan SQL

Ukuran kode SQL tidak boleh melebihi 128 KB, dan jumlah pernyataan SQL tidak boleh melebihi 200.

Hasil kueri

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

Hasil kueri tunduk pada batasan berikut:

  • Jika hasil kueri melebihi 10.000 baris, maksimal 10.000 baris akan ditampilkan.

  • Jika ukuran hasil kueri melebihi 10 MB, pesan error Result is too large, exceed the limit size: 10MB akan dikembalikan.

Catatan

Jika Anda mengalami batasan ini, Anda dapat mengunduh hasil kueri untuk dilihat secara lokal dengan salah satu metode berikut:

Catatan penggunaan

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

  • Tugas MaxCompute SQL memerlukan kuota sumber daya untuk dijalankan. Jika suatu tugas berjalan lama, buka konsol MaxCompute untuk memeriksa konsumsi kuota dan pastikan tersedia sumber daya yang cukup untuk menjalankan tugas tersebut. Untuk informasi lebih lanjut, lihat Resource Komputasi - Manajemen Kuota.

  • Saat mengembangkan tugas pada node ODPS SQL, parameter khusus, seperti alamat OSS, harus diapit tanda kutip ganda ("). Jika tidak, terjadi error parsing dan tugas gagal.

  • Dalam beberapa kasus ekstrem, seperti mati listrik server atau alih bencana primary/secondary, DataWorks mungkin tidak dapat sepenuhnya menghentikan tugas MaxCompute terkait. Dalam situasi ini, buka proyek MaxCompute terkait untuk menghentikan pekerjaan.

  • Urutan eksekusi pernyataan kata kunci (SET dan USE) berbeda-beda tergantung lingkungan DataWorks.

    • Di DataStudio: Semua pernyataan kata kunci (SET dan USE) digabungkan dan dieksekusi sebelum pernyataan SQL lainnya.

    • Di lingkungan Penjadwalan: Pernyataan dieksekusi sesuai urutan penulisannya.

    Asumsikan kode berikut didefinisikan dalam suatu node.

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

    Tabel berikut menjelaskan urutan eksekusi di lingkungan berbeda.

    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 MaxCompute SQL menggunakan sintaks yang mirip dengan SQL standar dan mendukung pernyataan DDL, DML, dan DQL, serta sintaks khusus MaxCompute. Untuk informasi lebih lanjut tentang persyaratan sintaks dan contoh penggunaan setiap perintah SQL, lihat Ikhtisar SQL. Contoh sederhana berikut menunjukkan cara mengembangkan dan menjalankan perintah SQL.

Catatan
  • Saat menggunakan tipe data baru dengan fungsi ekstensi MaxCompute 2.0, Anda perlu menambahkan SET odps.sql.type.system.odps2=true; sebelum pernyataan SQL dan mengirimkannya bersama agar tipe data baru dapat digunakan. Untuk informasi lebih lanjut, lihat Versi Tipe Data 2.0.

  • DataWorks menyediakan parameter penjadwalan untuk mengaktifkan penerusan parameter dinamis dalam skenario terjadwal. Anda dapat mendefinisikan variabel dalam kode node ODPS SQL menggunakan format ${variable_name} dan memberikan nilai di bagian Properties > Parameter. Untuk informasi lebih lanjut tentang format yang didukung untuk parameter penjadwalan, lihat Format yang didukung untuk parameter penjadwalan.

  • Buat tabel

    Anda dapat menggunakan pernyataan CREATE TABLE untuk membuat tabel non-partisi, tabel partisi, tabel eksternal, atau Tabel terkluster. Untuk informasi lebih lanjut, lihat CREATE TABLE. Contoh pernyataan SQL:

    -- 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). Contoh pernyataan SQL:

    -- Masukkan data.
    INSERT INTO students PARTITION(gender='boy') VALUES (1,'John',15,DATE '2008-05-15') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (2,'Jack',17,DATE '2006-07-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (3,'Alice',20,DATE '2003-04-20') ;
    INSERT INTO students PARTITION(gender='girl') VALUES (4,'Lily',21,DATE '2002-01-08') ;
    INSERT INTO students PARTITION(gender='boy') VALUES (5,'Bob',17,DATE '2006-09-12') ;
    Penting

    Hindari penggunaan pernyataan INSERT INTO untuk memasukkan data karena dapat menyebabkan duplikasi data secara tidak sengaja. Kami menyarankan Anda menggunakan pernyataan INSERT OVERWRITE. Untuk informasi lebih lanjut, lihat Masukkan atau timpa data.

  • Kueri data

    Anda dapat menggunakan pernyataan SELECT untuk melakukan operasi seperti kueri bersarang, kueri berkelompok, dan pengurutan. Untuk informasi lebih lanjut, lihat Sintaks SELECT. Contoh pernyataan SQL:

    -- (Opsional) Aktifkan pemindaian tabel penuh di tingkat proyek. Operasi ini memerlukan izin tingkat tinggi.
    -- SETPROJECT odps.sql.allow.fullscan=true;  
    
    -- Aktifkan pemindaian tabel penuh di tingkat sesi. Pengaturan ini hanya berlaku untuk sesi saat ini.
    SET odps.sql.allow.fullscan=true; 
    -- Kueri informasi semua anak laki-laki dan urutkan hasil berdasarkan ID secara ascending.
    SELECT * FROM students WHERE gender='boy' ORDER BY id;
    Catatan

    Secara default, Pengguna RAM tidak memiliki izin kueri pada tabel produksi. Untuk mengkueri tabel produksi, ajukan permintaan di Security Center. Untuk informasi tentang preset izin data MaxCompute dan kontrol akses di DataWorks, lihat Detail kontrol izin data MaxCompute. Untuk informasi tentang cara memberikan izin menggunakan perintah di 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 Ikhtisar fungsi bawaan. Untuk informasi lebih lanjut tentang UDF, lihat Ikhtisar UDF MaxCompute. Contoh berikut menunjukkan cara menggunakan fungsi SQL.

  • Fungsi bawaan: Fungsi ini telah dipra-instal di MaxCompute dan dapat dipanggil langsung. Berdasarkan contoh sebelumnya, Anda dapat menggunakan fungsi dateadd untuk memodifikasi kolom birth berdasarkan unit dan interval tertentu. Contoh perintah:

    -- Aktifkan pemindaian tabel penuh di tingkat sesi. 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 (UDF): Untuk menggunakan UDF, Anda harus menulis kode fungsi, mengunggahnya sebagai resource, dan mendaftarkan fungsi tersebut. Untuk informasi lebih lanjut, lihat Buat dan gunakan UDF.

Eksekusi dan hasil

  • Hasil eksekusi muncul langsung dalam format spreadsheet. Anda dapat melakukan operasi di DataWorks, membuka hasil dalam spreadsheet, atau menyalin dan menempel konten ke file Excel lokal. Untuk informasi lebih lanjut, lihat Debug tugas.

    Catatan

    Karena penyesuaian informasi zona waktu untuk Tiongkok yang dirilis oleh Organisasi Internasional untuk Standardisasi (ISO), mungkin terjadi perbedaan waktu dalam tampilan tanggal saat Anda menjalankan kueri SQL terkait di DataWorks. Selisih waktunya adalah 5 menit 52 detik untuk tanggal antara tahun 1900–1928, dan 9 detik untuk tanggal sebelum tahun 1900.

  • Log Runtime: Klik tab Operational Logs untuk melihat Logview. Untuk informasi lebih lanjut, lihat Lihat informasi pekerjaan menggunakan Logview V2.0.

  • Hasil yang dikembalikan:

    • Kueri informasi semua anak laki-laki dan urutkan hasil berdasarkan ID secara ascending.

      +------------+------------+------------+------------+------------+
      | id         | name       | age        | birth      | gender     |
      +------------+------------+------------+------------+------------+
      | 1          | John       | 15         | 2008-05-15 | boy        |
      | 2          | Jack       | 17         | 2006-07-20 | boy        |
      | 5          | Bob        | 17         | 2006-09-12 | boy        |
      +------------+------------+------------+------------+------------+
    • Modifikasi kolom birth berdasarkan unit dan interval tertentu.

      +------------+------------+------------+------------+---------------+
      | id         | name       | age        | birth      | birth_dateadd |
      +------------+------------+------------+------------+---------------+
      | 4          | Lily       | 21         | 2002-01-08 | 2002-02-08    |
      | 3          | Alice      | 20         | 2003-04-20 | 2003-05-20    |
      | 2          | Jack       | 17         | 2006-07-20 | 2006-08-20    |
      | 1          | John       | 15         | 2008-05-15 | 2008-06-15    |
      | 5          | Bob        | 17         | 2006-09-12 | 2006-10-12    |
      +------------+------------+------------+------------+---------------+

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

Edit kode: Contoh lanjutan

Untuk contoh lanjutan tugas ODPS SQL, lihat topik berikut:

FAQ

  • T: Mengapa Tugas ODPS SQL saya tetap berada dalam status menunggu dalam waktu lama?

    J: Tugas ODPS SQL memerlukan kuota sumber daya untuk dijalankan. Jika tugas Anda tetap dalam status menunggu dalam waktu lama, buka konsol MaxCompute untuk memeriksa konsumsi kuota dan pastikan tersedia sumber daya yang cukup untuk menjalankan tugas tersebut. Untuk informasi lebih lanjut, lihat Resource Komputasi - Manajemen Kuota.

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

    J: Akun yang digunakan untuk menjalankan tugas ODPS SQL harus memiliki izin yang diperlukan pada proyek MaxCompute terkait. Untuk informasi lebih lanjut, lihat Izin MaxCompute.