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 Untuk informasi lebih lanjut, lihat Komentar MaxCompute SQL. Batasan tambahan berikut juga berlaku untuk komentar:
|
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:
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.
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 TABLEuntuk 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 INTOatauINSERT OVERWRITEuntuk 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') ;PentingHindari penggunaan pernyataan
INSERT INTOuntuk memasukkan data karena dapat menyebabkan duplikasi data secara tidak sengaja. Kami menyarankan Anda menggunakan pernyataanINSERT OVERWRITE. Untuk informasi lebih lanjut, lihat Masukkan atau timpa data.Kueri data
Anda dapat menggunakan pernyataan
SELECTuntuk 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;CatatanSecara 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
dateadduntuk memodifikasi kolombirthberdasarkan 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.
CatatanKarena 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.