Topik ini menjawab beberapa pertanyaan umum terkait fungsi bawaan MaxCompute.
Apakah fungsi bawaan MaxCompute mendukung konversi dari 2010/1/3 ke 2010-01-03?
Tidak, fungsi bawaan MaxCompute tidak mendukung konversi dari 2010/1/3 ke 2010-01-03. Anda dapat menggunakan to_char(to_date('2010/01/03', 'yyyy/mm/dd'), 'yyyy-mm-dd') untuk mengonversi nilai tanggal 2010/01/03 menjadi 2010-01-03. Untuk informasi lebih lanjut tentang fungsi bawaan, lihat TO_DATE dan TO_CHAR.
Untuk mengonversi 2010/1/3 menjadi 2010-01-03, Anda perlu menulis fungsi yang ditentukan pengguna (UDF). Untuk informasi lebih lanjut tentang cara menulis UDF, lihat Ikhtisar.
Bagaimana cara mengonversi timestamp UNIX tipe BIGINT menjadi nilai tanggal tipe DATETIME?
Anda dapat menggunakan fungsi FROM_UNIXTIME untuk mengonversi timestamp UNIX tipe BIGINT menjadi nilai tanggal tipe DATETIME. Untuk informasi lebih lanjut, lihat FROM_UNIXTIME.
Bagaimana cara mendapatkan waktu sistem saat ini?
Anda dapat menggunakan fungsi GETDATE untuk mendapatkan waktu sistem saat ini. Untuk informasi lebih lanjut, lihat GETDATE.
Apa yang harus saya lakukan jika muncul pesan kesalahan "tidak dapat diselesaikan" ketika saya menggunakan fungsi YEAR, QUARTER, MONTH, atau DAY?
- Deskripsi Masalah
Pesan kesalahan berikut muncul ketika saya menggunakan fungsi YEAR, QUARTER, MONTH, atau DAY:
FAILED: ODPS-0130071:[1,8] Semantic analysis exception - function or view 'year' cannot be resolved - Penyebab
Fungsi YEAR, QUARTER, MONTH, dan DAY adalah ekstensi MaxCompute V2.0. Untuk menggunakan fungsi tanggal ini, Anda harus mengaktifkan edisi tipe data MaxCompute V2.0.
- Solusi
Tambahkan
set odps.sql.type.system.odps2 = true;sebelum pernyataan SQL untuk mengaktifkan edisi tipe data MaxCompute V2.0.
Ketika saya menggunakan fungsi TO_DATE, muncul pesan kesalahan yang menunjukkan bahwa nilai tanggal tidak mengandung bagian menit. Apa yang harus saya lakukan?
- Deskripsi Masalah
Pesan kesalahan berikut muncul ketika pernyataan SQL yang berisi
to_date('2016-07-18 18:18:18', 'yyyy-MM-dd HH:mm:ss')dieksekusi:FAILED: ODPS-0121095:Invalid arguments - format string has second part, but doesn't have minute part : yyyy-MM-dd HH:mm:ss - Penyebab
Format parameter kedua dalam fungsi TO_DATE tidak valid. Baik
mmmaupunMMmenunjukkan bulan.mimenunjukkan menit. - Solusi
Ubah fungsi dalam pernyataan SQL menjadi
to_date('2016-07-18 18:18:18', 'yyyy-MM-dd HH:mi:ss').
Mengapa hasil yang tidak terduga dikembalikan ketika saya menggunakan fungsi ROUND untuk membulatkan data tipe DOUBLE?
ROUND untuk membulatkan nilai tipe DOUBLE, nilai 4.515 dibulatkan menjadi 4.51. Contoh pernyataan:select round(4.515, 2),round(125.315, 2); Nilai tipe DOUBLE adalah angka floating point presisi ganda 8-byte, yang memiliki perbedaan dalam presisi. Nilai tipe DOUBLE untuk 4.515 adalah 4.514999999.... Akibatnya, hasil pembulatan adalah 4.51.
Apa saja fungsi yang dapat saya gunakan untuk mengonfigurasi urutan penambahan otomatis di MaxCompute?
Anda dapat menggunakan fungsi ROW_NUMBER untuk mengonfigurasi urutan penambahan otomatis. Untuk informasi lebih lanjut, lihat ROW_NUMBER.
Bagaimana cara menggabungkan nilai dalam sebuah kolom?
Anda dapat menggunakan fungsi WM_CONCAT untuk menggabungkan nilai dalam sebuah kolom. Untuk informasi lebih lanjut, lihat WM_CONCAT.
Apakah MaxCompute mendukung fungsi MD5?
Ya, MaxCompute mendukung fungsi MD5. Untuk informasi lebih lanjut, lihat MD5.
Bagaimana cara melengkapi string dengan 0 di sebelah kiri untuk meningkatkan panjang string ke panjang yang ditentukan?
Anda dapat menggunakan fungsi LPAD untuk melengkapi string dengan 0 di sebelah kiri hingga mencapai panjang tertentu. Untuk informasi lebih lanjut, lihat LPAD.
Apakah MaxCompute mendukung fungsi SUBSTRING_INDEX dari MySQL?
Ya, MaxCompute mendukung fungsi SUBSTRING_INDEX. Untuk informasi lebih lanjut, lihat SUBSTRING_INDEX.
Apakah parameter pola dari fungsi REGEXP_COUNT mendukung pernyataan query bersarang?
Tidak, parameter pola dari fungsi REGEXP_COUNT tidak mendukung pernyataan query bersarang. Untuk informasi lebih lanjut tentang cara menggunakan fungsi REGEXP_COUNT, lihat REGEXP_COUNT.
Apakah MaxCompute mendukung fungsi to_char (Data, FM9999.00) dari Oracle?
Tidak, MaxCompute tidak mendukung fungsi ini. Jika Anda ingin mengubah hanya format tampilan angka, Anda dapat menggunakan fungsi FORMAT_NUMBER. Contoh pernyataan:
-- Nilai yang dikembalikan adalah 12,332.123.
select format_number(12332.123456, '#,###,###,###.###');Apa yang harus saya lakukan jika muncul pesan kesalahan "Fungsi tidak valid" ketika saya menggunakan fungsi IFNULL?
- Deskripsi MasalahFungsi IFNULL digunakan dalam pernyataan SQL berikut:
Pesan kesalahan berikut muncul:select a.id as id > , ifnull(concat('phs\xxx', a.insy, '\xxxb\xxx', ifnull()))Semantic analysis exception - Invalid function : line 1:41 'ifnull' - Penyebab
MaxCompute tidak mendukung fungsi
IFNULL. - Solusi
Gunakan ekspresi
CASE WHENatau fungsiCOALESCE. Untuk informasi lebih lanjut, lihat Ekspresi CASE WHEN atau COALESCE.
Bagaimana cara menggabungkan semua bidang yang sesuai dengan kondisi tertentu dalam string JSON?
SQL MaxCompute menanyakan data yang sesuai dengan kondisi tertentu menggunakan kondisi filter seperti like. Setelah mendapatkan hasil kueri, SQL MaxCompute menggunakan fungsi ARRAY atau MAP untuk membangun data sebagai tipe data kompleks seperti MAP atau ARRAY, kemudian menggunakan fungsi TO_JSON untuk mengumpulkan data.
Bagaimana cara menggunakan setiap kunci dalam string JSON sebagai bidang?
Anda dapat menggunakan fungsi GET_JSON_OBJECT untuk mengekstrak bidang dari string JSON.
Bagaimana cara mengonversi string JSON menjadi array?
Anda dapat menggunakan fungsi FROM_JSON dalam pernyataan SQL untuk melakukan konversi tipe data seperti select from_json(<col_name>, "array<bigint>");.
Fungsi apa dari MaxCompute yang mirip dengan fungsi IFNULL dari MySQL?
Fungsi IFNULL dari MySQL mirip dengan fungsi NVL dari MaxCompute. Untuk informasi lebih lanjut tentang pemetaan antara fungsi bawaan MaxCompute dan fungsi Hive, MySQL, dan Oracle, lihat Pemetaan antara fungsi bawaan MaxCompute dan fungsi bawaan Hive, MySQL, dan Oracle.
Bagaimana cara mengonversi satu baris data menjadi beberapa baris data?
Anda dapat menggunakan fungsi TRANS_COLS untuk mengonversi satu baris data menjadi beberapa baris data.
Apa yang harus saya lakukan jika muncul pesan kesalahan "Ekspresi tidak dalam GROUP BY key" ketika saya menggunakan fungsi COALESCE?
- Deskripsi Masalah
Pesan kesalahan berikut muncul ketika lebih dari satu ekspresi digunakan dalam fungsi COALESCE:
FAILED: ODPS-0130071:Semantic analysis exception - Expression not in GROUP BY key : line 8:9 "$.table"Contoh pernyataan:select md5(concat(aid,bid)) as id ,aid , bid , sum(amountdue) as amountdue , coalesce( sum(regexp_count(get_json_object(extended_x, '$.table.tableParties'), '{')), decode(get_json_object(extended_x, '$.table'), null, 0, 1) ) as tableparty , decode(sum(headcount),null,0,sum(headcount) ) as headcount , 'a' as pt from e_orders where pt='20170425' group by aid, bid; - Penyebab
Bidang pengelompokan yang diperlukan tidak ditentukan untuk GROUP BY.
- Solusi
Tentukan ekspresi berikut setelah GROUP BY. Ekspresi tersebut mengembalikan bidang.
coalesce( sum(regexp_count(get_json_object(extended_x, '$.table.tableParties'), '{')), decode(get_json_object(extended_x, '$.table'), null, 0, 1) ) as tableparty , decode(sum(headcount),null,0,sum(headcount) ) as headcount
Apa yang harus saya lakukan jika muncul kesalahan konversi tipe data implisit ketika saya menggunakan fungsi bawaan MaxCompute?
odps.sql.type.system.odps2=true untuk mengaktifkan edisi tipe data MaxCompute V2.0 untuk proyek MaxCompute, konversi implisit antara tipe data berikut dinonaktifkan dan loss of precision atau kesalahan mungkin terjadi:- STRING->BIGINT
- STRING->DATETIME
- DOUBLE->BIGINT
- DECIMAL->DOUBLE
- DECIMAL->BIGINT
odps.sql.type.system.odps2=false untuk menonaktifkan edisi tipe data MaxCompute V2.0.