Kepatuhan ANSI dalam Databricks Runtime

Berlaku untuk:Ditandai centang ya Databricks SQL Ditandai centang ya Databricks Runtime

Artikel ini menjelaskan kepatuhan ANSI di Databricks Runtime. Untuk mode ANSI di Databricks SQL, lihat ANSI_MODE.

SQL Spark memiliki dua opsi untuk mendukung kepatuhan terhadap standar SQL ANSI: spark.sql.ansi.enabled dan spark.sql.storeAssignmentPolicy.

  • spark.sql.ansi.enabled (Mode ANSI)

    • Menggunakan dialek SQL yang mematuhi ANSI, bukan dialek yang kompatibel dengan Apache Hive.
    • Melemparkan pengecualian runtime untuk input yang tidak valid alih-alih mengembalikan null.
    • Diaktifkan secara default di Apache Spark 4.0 dan Databricks Runtime 17.0 ke atas.
  • spark.sql.storeAssignmentPolicy (kebijakan penetapan penyimpanan)

    • Mengontrol transmisi implisit selama penyisipan tabel.
    • Diatur default ke ANSI dan tidak bergantung pada spark.sql.ansi.enabled.

Tabel berikut ini meringkas perilaku:

Nama Properti Bawaan Makna
spark.sql.ansi.enabled true Jika true, Spark mencoba menyesuaikan dengan spesifikasi ANSI SQL:
  • Spark SQL akan melemparkan pengecualian runtime pada operasi yang tidak valid, termasuk kesalahan luapan bilangan bulat, kesalahan penguraian string, dll.
  • Spark akan menggunakan aturan koersi jenis yang berbeda untuk menyelesaikan konflik di antara jenis data. Aturan secara konsisten didasarkan pada prioritas jenis data.
spark.sql.storeAssignmentPolicy ANSI Saat menyimpan nilai ke dalam kolom dengan jenis data yang berbeda, Spark melakukan konversi jenis. Ada tiga kebijakan untuk jenis aturan konversi eksplisit: ANSI, legacy, dan strict.
  • ANSI: Spark melakukan koersi jenis sesuai ANSI SQL. Dalam praktiknya, perilakunya sebagian besar sama dengan PostgreSQL. Perilaku ini melarang konversi jenis tertentu yang tidak masuk akal seperti mengonversi string ke int atau ganda ke boolean.
  • legacy: Spark memungkinkan koersi tipe selama itu merupakan Cast yang valid, yang sangat fleksibel. Misalnya, mengonversi string ke int atau ganda ke boolean diizinkan. Perilaku ini juga satu-satunya perilaku di Spark 2.x dan sesuai dengan Apache Hive.
  • strict: Spark tidak mengizinkan adanya kehilangan presisi atau truncasi data dalam paksaan tipe, misalnya, mengonversi 'double' ke 'int' atau 'decimal' menjadi 'double' tidak diizinkan.

Subbagian berikut menyajikan perubahan perilaku dalam operasi aritmatika, konversi jenis, dan penguraian SQL saat mode ANSI diaktifkan. Untuk jenis konversi di SQL Spark, ada tiga jenisnya dan artikel ini akan memperkenalkannya satu per satu: transmisikan, penugasan penyimpanan, dan jenis konversi eksplisit.

Operasi aritmatika

Dalam SQL Spark, operasi aritmatika yang dilakukan pada jenis numerik (dengan pengecualian desimal) tidak diperiksa untuk luapan secara default. Hal ini berarti bahwa jika operasi menyebabkan luapan, hasilnya sama dengan operasi yang sesuai dalam program Java atau Scala (Misalnya, jika jumlah 2 bilangan bulat lebih tinggi dari nilai maksimum yang dapat diwakili, hasilnya adalah angka negatif). Di sisi lain, SQL Spark mengembalikan null untuk luapan desimal. Ketika spark.sql.ansi.enabled diatur ke true dan luapan terjadi dalam operasi aritmatika numerik dan interval, itu melemparkan pengecualian aritmatika pada runtime.

-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
 error: integer overflow

-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
  -2147483648

Transmisi

Ketika spark.sql.ansi.enabled diatur ke true, transmisi eksplisit dengan sintaks CAST melemparkan pengecualian runtime untuk pola cast ilegal yang ditentukan dalam standar, seperti transmisi dari string ke bilangan bulat.

Klausul CAST mode ANSI Spark mengikuti aturan sintaks dari bagian 6.13 “spesifikasi transmisi” di ISO/IEC 9075-2:2011 Teknologi informasi — Bahasa database - SQL — Bagian 2: Foundation (SQL/Foundation), kecuali secara khusus memungkinkan konversi jenis langsung berikut yang tidak diizinkan sesuai standar ANSI:

  • NumericType <=> BooleanType
  • StringType <=> BinaryType

Kombinasi tipe data sumber dan target yang valid dalam ekspresi CAST diberikan oleh tabel berikut. “Y” menunjukkan bahwa kombinasi tersebut valid secara sintaksis tanpa batasan dan “N” menunjukkan bahwa kombinasi tersebut tidak valid.

SourceTarget Numerik string Tanggal Tanda Waktu Jarak Waktu Boolean Biner Array Peta Struktur
Numerik Ya Ya N N N Ya N N N N
string Ya Ya Ya Ya Ya Ya Ya N N N
Tanggal N Ya Ya Ya N N N N N N
Tanda Waktu N Ya Ya Ya N N N N N N
Jarak Waktu N Ya N N Ya N N N N N
Boolean Ya Ya N N N Ya N N N N
Biner Ya N N N N N Ya N N N
Array N N N N N N N Ya N N
Peta N N N N N N N N Ya N
Struktur N N N N N N N N N Ya
-- Examples of explicit casting

-- `spark.sql.ansi.enabled=true`
> SELECT CAST('a' AS INT);
  ERROR: [CAST_INVALID_INPUT] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed.

> SELECT CAST(2147483648L AS INT);
  ERROR: [CAST_OVERFLOW] The value 2147483648L of the type "BIGINT" cannot be cast to "INT" due to an overflow.

> SELECT CAST(DATE'2020-01-01' AS INT)
  ERROR: [DATATYPE_MISMATCH.CAST_WITH_FUNC_SUGGESTION] Cannot resolve "CAST(DATE '2020-01-01' AS INT)" due to data type mismatch: cannot cast "DATE" to "INT".

-- `spark.sql.ansi.enabled=false`
> SELECT cast('a' AS INT);
  null

> SELECT CAST(2147483648L AS INT);
  -2147483648

> SELECT CAST(DATE'2020-01-01' AS INT);
  null

Penugasan penyimpanan

Pengaturan spark.sql.storeAssignmentPolicy default ke ANSI. Dengan pengaturan ini, ketika jenis data nilai sumber tidak cocok dengan jenis kolom target, Spark SQL secara otomatis menambahkan klausa ANSI CAST ke INSERT pernyataan. Selama penyisipan tabel di bawah kebijakan ini, Spark memeriksa dan menolak cast yang tidak valid, melemparkan pengecualian untuk memastikan kualitas data. Ini berarti jika upaya penyisipan gagal karena ketidakcocokan jenis, itu tidak akan mengakibatkan data apa pun ditulis sebagian ke tabel.

Contoh:

-- spark.sql.storeAssignmentPolicy=ANSI
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
  ERROR: [CAST_OVERFLOW_IN_TABLE_INSERT] Fail to insert a value of "BIGINT" type into the "INT" type column `i` due to an overflow.

> INSERT INTO test VALUES ('a');
  ERROR: [CAST_INVALID_INPUT ERROR] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed

Contoh-contoh ini menunjukkan Spark SQL mencegah data yang tidak kompatibel disisipkan, sehingga mempertahankan integritas data.

Ketika spark.sql.storeAssignmentPolicy diatur ke LEGACY, Spark SQL kembali ke perilaku yang lazim hingga Spark 2.x. Dalam mode ini, alih-alih menggunakan ANSI CAST, ia menerapkan operasi CAST warisan. Di bawah kebijakan ini, cast yang tidak valid selama penyisipan tabel mengakibatkan nilai NULL atau nilai yang salah dimasukkan, daripada melemparkan pengecualian. Contoh:

-- spark.sql.storeAssignmentPolicy=LEGACY
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
> INSERT INTO test VALUES ('a');
> SELECT * FROM test;

-- Results
--  -2147483648 (incorrect value due to overflow)
--  null (cannot cast 'a' to INT)

Konversi eksplisit jenis

Jenis Promosi dan Prioritas

Saat spark.sql.ansi.enabled diatur ke true, Spark SQL menggunakan beberapa aturan yang mengatur bagaimana konflik antara jenis data diselesaikan. Inti dari resolusi konflik ini adalah Daftar Prioritas Jenis yang menentukan apakah nilai jenis data tertentu dapat dipromosikan ke jenis data lain secara implisit.

Jenis Data daftar prioritas(dari tersempit ke terluas)
Bita Byte -> Pendek -> Int -> Panjang -> Desimal -> Float* -> Ganda
Pendek Pendek -> Int -> Panjang -> Desimal-> Float* -> Ganda
Integer Int -> Panjang -> Desimal -> Float* -> Ganda
Panjang Panjang -> Desimal -> Float* -> Ganda
Desimal Desimal -> Float* -> Ganda
Mengapung Float -> Ganda
Laju Laju
Tanggal Tanggal -> Stempel waktu
Tanda Waktu Tanda Waktu
string string
Biner Biner
Boolean Boolean
Jarak Waktu Jarak Waktu
Peta Peta**
Array Array**
Struktur Struktur**
  • Untuk float resolusi jenis yang paling tidak umum akan dilewati untuk menghindari hilangnya presisi.

** Untuk jenis yang kompleks, aturan prioritas berlaku secara berulang pada elemen komponennya.

Aturan khusus berlaku untuk jenis String dan NULL yang tidak diketik. NULL dapat dipromosikan ke jenis lain, sementara String dapat dipromosikan ke jenis data sederhana apa pun.

Ini adalah penggambaran grafis dari daftar prioritas sebagai pohon yang diarahkan: Representasi grafis dari aturan prioritas

Resolusi Jenis yang Paling Tidak Umum

Jenis paling tidak umum dari sekumpulan jenis adalah jenis tersempit yang dapat dijangkau dari daftar prioritas oleh semua elemen dari kumpulan jenis.

Resolusi jenis yang paling tidak umum digunakan untuk:

  • Menentukan apakah suatu fungsi yang mengharapkan parameter dari suatu jenis dapat dipanggil menggunakan argumen dari jenis yang lebih sempit.
  • Mendapatkan jenis argumen untuk fungsi yang mengharapkan jenis argumen bersama untuk beberapa parameter, seperti coalesce, paling sedikit, atau terbesar.
  • Memperoleh jenis operand untuk operator seperti operasi aritmatika atau perbandingan.
  • Memperoleh jenis hasil untuk ekspresi seperti ekspresi kasus.
  • Memperoleh elemen, kunci, atau jenis nilai untuk konstruktor array dan peta.

Aturan khusus diterapkan jika jenis yang paling tidak umum memutuskan untuk FLOAT. Dengan nilai jenis float, jika salah satu jenisnya adalah INT, BIGINT, atau DECIMAL, jenis yang paling tidak umum didorong ke DOUBLE untuk menghindari potensi hilangnya digit.

-- The coalesce function accepts any set of argument types as long as they share a least common type.
-- The result type is the least common type of the arguments.
> SET spark.sql.ansi.enabled=true;

> SELECT typeof(coalesce(1Y, 1L, NULL));
BIGINT

> SELECT typeof(coalesce(1, DATE'2020-01-01'));
Error: Incompatible types [INT, DATE]

> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L)));
ARRAY<BIGINT>

> SELECT typeof(coalesce(1, 1F));
DOUBLE

> SELECT typeof(coalesce(1L, 1F));
DOUBLE

> SELECT (typeof(coalesce(1BD, 1F)));
DOUBLE

-- The substring function expects arguments of type INT for the start and length parameters.
> SELECT substring('hello', 1Y, 2);
he

> SELECT substring('hello', '1', 2);
he

> SELECT substring('hello', 1L, 2);
Error: Argument 2 requires an INT type.

> SELECT substring('hello', str, 2) FROM VALUES(CAST('1' AS STRING)) AS T(str);
Error: Argument 2 requires an INT type.

Fungsi SQL

Perilaku beberapa fungsi SQL dapat berbeda dalam mode ANSI (spark.sql.ansi.enabled=true).

  • size: Fungsi ini menghasilkan null untuk input null dalam mode ANSI.
  • element_at:
    • Fungsi ini menampilkan ArrayIndexOutOfBoundsException jika menggunakan indeks yang tidak valid.
    • Fungsi ini menampilkan NoSuchElementException jika kunci tidak ada di peta.
  • elt: Fungsi ini menampilkan ArrayIndexOutOfBoundsException jika menggunakan indeks yang tidak valid.
  • make_date: Fungsi ini gagal dengan pengecualian jika tanggal hasil tidak valid.
  • make_timestamp: Fungsi ini gagal dengan pengecualian jika stempel waktu tidak valid.
  • make_interval: Fungsi ini gagal dengan pengecualian jika interval hasil tidak valid.
  • next_day: Fungsi ini menampilkan IllegalArgumentException jika input bukan hari yang valid dalam seminggu.
  • parse_url: Fungsi ini menampilkan IllegalArgumentException jika input string bukan url yang valid.
  • to_date: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diurai, atau string pola tidak valid.
  • to_timestamp: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diurai, atau string pola tidak valid.
  • to_unix_timestamp: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diurai, atau string pola tidak valid.
  • unix_timestamp: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diurai, atau string pola tidak valid.

Operator SQL

Perilaku beberapa operator SQL dapat berbeda dalam mode ANSI (spark.sql.ansi.enabled=true).

  • array_col[index]: Operator ini menampilkan ArrayIndexOutOfBoundsException jika menggunakan indeks yang tidak valid.
  • map_col[key]: Operator ini menampilkan NoSuchElementException jika kunci tidak ada di peta.
  • CAST(string_col AS TIMESTAMP): Operator ini gagal dengan pengecualian jika string input tidak dapat diurai.
  • CAST(string_col AS DATE): Operator ini gagal dengan pengecualian jika string input tidak dapat diurai.

Fungsi yang berguna untuk Mode ANSI

Saat mode ANSI diaktifkan, mode ini menampilkan pengecualian untuk operasi yang tidak valid. Anda dapat menggunakan fungsi SQL berikut untuk menyembunyikan pengecualian tersebut.

  • try_cast: identik dengan CAST, kecuali bahwa ia menampilkan hasil NULL alih-alih memberikan pengecualian pada kesalahan runtime.
  • try_add: identik dengan operator tambah +, kecuali bahwa ia menampilkan hasil NULL alih-alih menampilkan pengecualian pada luapan nilai integral.
  • try_divide: identik dengan operator pembagian /, kecuali bahwa itu mengembalikan hasil NULL alih-alih memberikan pengecualian pada pembagian 0.

Kata kunci SQL

Ketika keduanya spark.sql.ansi.enabled=true dan spark.sql.ansi.enforceReservedKeywords=true, Spark SQL menggunakan pengurai ANSI. Secara default, spark.sql.ansi.enforceReservedKeywords adalah false.

Dalam mode pengurai ANSI, kata kunci termasuk dalam dua kategori:

  • Dicadangkan: Tidak dapat dipakai sebagai pengidentifikasi (tabel, view, kolom, fungsi, alias, dan sebagainya).
  • Tidak dicadangkan: Bertindak sebagai kata kunci hanya dalam konteks tertentu; selain itu, dapat digunakan sebagai pengenal. Misalnya, EXPLAIN SELECT ... adalah perintah, tetapi EXPLAIN dapat digunakan sebagai pengidentifikasi di tempat lain.

Ketika pengurai ANSI tidak digunakan, kata kunci termasuk dalam:

  • Tidak dicadangkan: Definisi yang sama seperti di atas.
  • Strict-non-reserved: Mirip dengan non-reserved, tetapi tidak dapat digunakan sebagai alias tabel.

Di bawah ini adalah daftar semua kata kunci di Spark SQL.

Kata kunci Spark SQL ANSI Mode Spark SQL Mode Bawaan SQL-2016
TAMBAH tidak dicadangkan tidak dicadangkan tidak dicadangkan
SESUDAH tidak dicadangkan tidak dicadangkan tidak dicadangkan
SEMUA dicadangkan tidak dicadangkan dicadangkan
UBAH tidak dicadangkan tidak dicadangkan dicadangkan
SELALU tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENGANALISIS tidak dicadangkan tidak dicadangkan tidak dicadangkan
DAN dicadangkan tidak dicadangkan dicadangkan
ANTI tidak dicadangkan ketat yang tidak dicadangkan tidak dicadangkan
Apa saja dicadangkan tidak dicadangkan dicadangkan
ARSIP tidak dicadangkan tidak dicadangkan tidak dicadangkan
ARRAY tidak dicadangkan tidak dicadangkan dicadangkan
Amerika Serikat dicadangkan tidak dicadangkan dicadangkan
ASC tidak dicadangkan tidak dicadangkan tidak dicadangkan
DI tidak dicadangkan tidak dicadangkan dicadangkan
OTORISASI dicadangkan tidak dicadangkan dicadangkan
ANTARA tidak dicadangkan tidak dicadangkan dicadangkan
KEDUANYA dicadangkan tidak dicadangkan dicadangkan
EMBER tidak dicadangkan tidak dicadangkan tidak dicadangkan
EMBER tidak dicadangkan tidak dicadangkan tidak dicadangkan
OLEH tidak dicadangkan tidak dicadangkan dicadangkan
TEMBOLOK tidak dicadangkan tidak dicadangkan tidak dicadangkan
Rangkaian tidak dicadangkan tidak dicadangkan tidak dicadangkan
KASUS dicadangkan tidak dicadangkan dicadangkan
Pemeran dicadangkan tidak dicadangkan dicadangkan
UBAH tidak dicadangkan tidak dicadangkan tidak dicadangkan
CEK dicadangkan tidak dicadangkan dicadangkan
KOSONGKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
KELOMPOK tidak dicadangkan tidak dicadangkan tidak dicadangkan
TERKUMPUL DALAM GUGUS tidak dicadangkan tidak dicadangkan tidak dicadangkan
CODEGEN tidak dicadangkan tidak dicadangkan tidak dicadangkan
KOMPILASI dicadangkan tidak dicadangkan dicadangkan
KUMPULAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
COLUMN dicadangkan tidak dicadangkan dicadangkan
COLUMNS tidak dicadangkan tidak dicadangkan tidak dicadangkan
KOMENTAR tidak dicadangkan tidak dicadangkan tidak dicadangkan
MELAKUKAN tidak dicadangkan tidak dicadangkan dicadangkan
PADAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
PEMADATAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENGHITUNG tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENGGABUNGKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
CONSTRAINT dicadangkan tidak dicadangkan dicadangkan
BIAYA tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENCIPTAKAN dicadangkan tidak dicadangkan dicadangkan
SALIB dicadangkan ketat yang tidak dicadangkan dicadangkan
KUBUS tidak dicadangkan tidak dicadangkan dicadangkan
SAAT INI tidak dicadangkan tidak dicadangkan dicadangkan
(TANGGAL_SAAT_INI) dicadangkan tidak dicadangkan dicadangkan
WAKTU_SAAT_INI dicadangkan tidak dicadangkan dicadangkan
CURRENT_TIMESTAMP (stempel waktu saat ini) dicadangkan tidak dicadangkan dicadangkan
PENGGUNA_SAAT_INI dicadangkan tidak dicadangkan dicadangkan
DATA tidak dicadangkan tidak dicadangkan tidak dicadangkan
BASIS DATA tidak dicadangkan tidak dicadangkan tidak dicadangkan
DATABASE tidak dicadangkan tidak dicadangkan tidak dicadangkan
HARI tidak dicadangkan tidak dicadangkan tidak dicadangkan
DBPROPERTIES tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIDEFINISIKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENGHAPUS tidak dicadangkan tidak dicadangkan dicadangkan
DIBATASI tidak dicadangkan tidak dicadangkan tidak dicadangkan
Deskripsi tidak dicadangkan tidak dicadangkan tidak dicadangkan
URAIKAN tidak dicadangkan tidak dicadangkan dicadangkan
DFS tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIREKTORI tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIREKTORI tidak dicadangkan tidak dicadangkan tidak dicadangkan
NYATA dicadangkan tidak dicadangkan dicadangkan
MENDISTRIBUSIKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIV tidak dicadangkan tidak dicadangkan bukan kata kunci
Jatuhkan tidak dicadangkan tidak dicadangkan dicadangkan
LAIN dicadangkan tidak dicadangkan dicadangkan
AKHIR dicadangkan tidak dicadangkan dicadangkan
MELARIKAN DIRI dicadangkan tidak dicadangkan dicadangkan
TERLEPAS tidak dicadangkan tidak dicadangkan tidak dicadangkan
KECUALI dicadangkan ketat yang tidak dicadangkan dicadangkan
PERTUKARAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
ADA tidak dicadangkan tidak dicadangkan dicadangkan
EXPLAIN tidak dicadangkan tidak dicadangkan tidak dicadangkan
EKSPOR tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIPERPANJANG tidak dicadangkan tidak dicadangkan tidak dicadangkan
EKSTERNAL tidak dicadangkan tidak dicadangkan dicadangkan
EKSTRAK tidak dicadangkan tidak dicadangkan dicadangkan
SALAH dicadangkan tidak dicadangkan dicadangkan
AMBIL dicadangkan tidak dicadangkan dicadangkan
RUANG tidak dicadangkan tidak dicadangkan tidak dicadangkan
SARINGAN dicadangkan tidak dicadangkan dicadangkan
FILEFORMAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
FIRST tidak dicadangkan tidak dicadangkan tidak dicadangkan
FN tidak dicadangkan tidak dicadangkan tidak dicadangkan
BERIKUT tidak dicadangkan tidak dicadangkan tidak dicadangkan
untuk dicadangkan tidak dicadangkan dicadangkan
ASING dicadangkan tidak dicadangkan dicadangkan
Format tidak dicadangkan tidak dicadangkan tidak dicadangkan
Terformat tidak dicadangkan tidak dicadangkan tidak dicadangkan
DARI dicadangkan tidak dicadangkan dicadangkan
PENUH dicadangkan ketat yang tidak dicadangkan dicadangkan
FUNGSI tidak dicadangkan tidak dicadangkan dicadangkan
FUNGSI tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIHASILKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
Global tidak dicadangkan tidak dicadangkan dicadangkan
GRANT dicadangkan tidak dicadangkan dicadangkan
HIBAH tidak dicadangkan tidak dicadangkan tidak dicadangkan
KELOMPOK dicadangkan tidak dicadangkan dicadangkan
PENGELOMPOKAN tidak dicadangkan tidak dicadangkan dicadangkan
HAVING dicadangkan tidak dicadangkan dicadangkan
JAM tidak dicadangkan tidak dicadangkan tidak dicadangkan
JIKA tidak dicadangkan tidak dicadangkan bukan kata kunci
MENGABAIKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENGIMPOR tidak dicadangkan tidak dicadangkan tidak dicadangkan
DI dicadangkan tidak dicadangkan dicadangkan
INDEKS tidak dicadangkan tidak dicadangkan tidak dicadangkan
INDEKS tidak dicadangkan tidak dicadangkan tidak dicadangkan
Dalam dicadangkan ketat yang tidak dicadangkan dicadangkan
INPATH tidak dicadangkan tidak dicadangkan tidak dicadangkan
format masukan tidak dicadangkan tidak dicadangkan tidak dicadangkan
INSERT tidak dicadangkan tidak dicadangkan dicadangkan
PERPOTONGAN dicadangkan ketat yang tidak dicadangkan dicadangkan
Selang tidak dicadangkan tidak dicadangkan dicadangkan
KE dicadangkan tidak dicadangkan dicadangkan
Negara Islam dicadangkan tidak dicadangkan dicadangkan
ITEM tidak dicadangkan tidak dicadangkan tidak dicadangkan
JOIN dicadangkan ketat yang tidak dicadangkan dicadangkan
JSON tidak dicadangkan tidak dicadangkan tidak dicadangkan
KUNCI tidak dicadangkan tidak dicadangkan tidak dicadangkan
KUNCI tidak dicadangkan tidak dicadangkan tidak dicadangkan
TERAKHIR tidak dicadangkan tidak dicadangkan tidak dicadangkan
samping dicadangkan ketat yang tidak dicadangkan dicadangkan
MALAS tidak dicadangkan tidak dicadangkan tidak dicadangkan
Terkemuka dicadangkan tidak dicadangkan dicadangkan
KIRI dicadangkan ketat yang tidak dicadangkan dicadangkan
Suka tidak dicadangkan tidak dicadangkan dicadangkan
ILIKE tidak dicadangkan tidak dicadangkan tidak dicadangkan
LIMIT tidak dicadangkan tidak dicadangkan tidak dicadangkan
BARIS tidak dicadangkan tidak dicadangkan tidak dicadangkan
LIST tidak dicadangkan tidak dicadangkan tidak dicadangkan
MUAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
LOKAL tidak dicadangkan tidak dicadangkan dicadangkan
TEMPAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
KUNCI tidak dicadangkan tidak dicadangkan tidak dicadangkan
KUNCI tidak dicadangkan tidak dicadangkan tidak dicadangkan
LOGIS tidak dicadangkan tidak dicadangkan tidak dicadangkan
MAKRO tidak dicadangkan tidak dicadangkan tidak dicadangkan
PETA tidak dicadangkan tidak dicadangkan tidak dicadangkan
COCOK tidak dicadangkan tidak dicadangkan tidak dicadangkan
GABUNG tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENIT tidak dicadangkan tidak dicadangkan tidak dicadangkan
MINUS tidak dicadangkan ketat yang tidak dicadangkan tidak dicadangkan
BULAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
MSCK tidak dicadangkan tidak dicadangkan tidak dicadangkan
Ruang Nama (NAMESPACE) tidak dicadangkan tidak dicadangkan tidak dicadangkan
NAMESPACE tidak dicadangkan tidak dicadangkan tidak dicadangkan
ALAMI dicadangkan ketat yang tidak dicadangkan dicadangkan
TIDAK tidak dicadangkan tidak dicadangkan dicadangkan
TIDAK dicadangkan tidak dicadangkan dicadangkan
NOL dicadangkan tidak dicadangkan dicadangkan
NULL tidak dicadangkan tidak dicadangkan tidak dicadangkan
DARI tidak dicadangkan tidak dicadangkan dicadangkan
AKTIF dicadangkan ketat yang tidak dicadangkan dicadangkan
HANYA dicadangkan tidak dicadangkan dicadangkan
PILIHAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
OPSI tidak dicadangkan tidak dicadangkan tidak dicadangkan
ATAU dicadangkan tidak dicadangkan dicadangkan
PERINTAH dicadangkan tidak dicadangkan dicadangkan
KELUAR tidak dicadangkan tidak dicadangkan dicadangkan
LUAR dicadangkan tidak dicadangkan dicadangkan
OUTPUTFORMAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
ATAS tidak dicadangkan tidak dicadangkan tidak dicadangkan
Tumpang Tindih dicadangkan tidak dicadangkan dicadangkan
Lapisan Tambahan tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENIMPA tidak dicadangkan tidak dicadangkan tidak dicadangkan
PARTITION tidak dicadangkan tidak dicadangkan dicadangkan
DIPARTISI tidak dicadangkan tidak dicadangkan tidak dicadangkan
PARTISI tidak dicadangkan tidak dicadangkan tidak dicadangkan
PERSEN tidak dicadangkan tidak dicadangkan tidak dicadangkan
PIVOT tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENEMPATKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
POSISI tidak dicadangkan tidak dicadangkan dicadangkan
SEBELUMNYA tidak dicadangkan tidak dicadangkan tidak dicadangkan
UTAMA dicadangkan tidak dicadangkan dicadangkan
KEPALA SEKOLAH tidak dicadangkan tidak dicadangkan tidak dicadangkan
PROPERTI tidak dicadangkan tidak dicadangkan tidak dicadangkan
HAPUS MENYELURUH tidak dicadangkan tidak dicadangkan tidak dicadangkan
QUALIFY dicadangkan tidak dicadangkan dicadangkan
Kueri tidak dicadangkan tidak dicadangkan tidak dicadangkan
kisaran tidak dicadangkan tidak dicadangkan dicadangkan
PENERIMA tidak dicadangkan tidak dicadangkan tidak dicadangkan
RECIPIENTS tidak dicadangkan tidak dicadangkan tidak dicadangkan
Pembaca Rekaman tidak dicadangkan tidak dicadangkan tidak dicadangkan
Penulis Data Rekaman tidak dicadangkan tidak dicadangkan tidak dicadangkan
SEMBUH tidak dicadangkan tidak dicadangkan tidak dicadangkan
KURANGI tidak dicadangkan tidak dicadangkan tidak dicadangkan
REFERENSI dicadangkan tidak dicadangkan dicadangkan
REFRESH tidak dicadangkan tidak dicadangkan tidak dicadangkan
REGEXP tidak dicadangkan tidak dicadangkan bukan kata kunci
REMOVE tidak dicadangkan tidak dicadangkan tidak dicadangkan
UBAH NAMA tidak dicadangkan tidak dicadangkan tidak dicadangkan
MEMPERBAIKI tidak dicadangkan tidak dicadangkan tidak dicadangkan
Mengganti tidak dicadangkan tidak dicadangkan tidak dicadangkan
RESET tidak dicadangkan tidak dicadangkan tidak dicadangkan
HORMAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
BATASI tidak dicadangkan tidak dicadangkan tidak dicadangkan
REVOKE tidak dicadangkan tidak dicadangkan dicadangkan
benar dicadangkan ketat yang tidak dicadangkan dicadangkan
RLIKE tidak dicadangkan tidak dicadangkan tidak dicadangkan
PERAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
PERAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
Pengguliran Kembali tidak dicadangkan tidak dicadangkan dicadangkan
Penggulungan tidak dicadangkan tidak dicadangkan dicadangkan
BARIS tidak dicadangkan tidak dicadangkan dicadangkan
BARIS tidak dicadangkan tidak dicadangkan dicadangkan
SCHEMA tidak dicadangkan tidak dicadangkan tidak dicadangkan
SKEMA tidak dicadangkan tidak dicadangkan bukan kata kunci
KEDUA tidak dicadangkan tidak dicadangkan tidak dicadangkan
SELECT dicadangkan tidak dicadangkan dicadangkan
SEMI tidak dicadangkan ketat yang tidak dicadangkan tidak dicadangkan
TERPISAH tidak dicadangkan tidak dicadangkan tidak dicadangkan
SERDE tidak dicadangkan tidak dicadangkan tidak dicadangkan
SERDEPROPERTIES tidak dicadangkan tidak dicadangkan tidak dicadangkan
PENGGUNA_SESI dicadangkan tidak dicadangkan dicadangkan
SET tidak dicadangkan tidak dicadangkan dicadangkan
SET tidak dicadangkan tidak dicadangkan tidak dicadangkan
BAGIKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
SHARES tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENAMPILKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
MIRING tidak dicadangkan tidak dicadangkan tidak dicadangkan
BEBERAPA dicadangkan tidak dicadangkan dicadangkan
URUTKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIURUTKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
MULAI tidak dicadangkan tidak dicadangkan dicadangkan
STATISTIK tidak dicadangkan tidak dicadangkan tidak dicadangkan
DISIMPAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
Stratifikasi tidak dicadangkan tidak dicadangkan tidak dicadangkan
STRUKTUR tidak dicadangkan tidak dicadangkan tidak dicadangkan
SUBSTR tidak dicadangkan tidak dicadangkan tidak dicadangkan
substring tidak dicadangkan tidak dicadangkan tidak dicadangkan
SYNC tidak dicadangkan tidak dicadangkan tidak dicadangkan
TABLE dicadangkan tidak dicadangkan dicadangkan
TABLES tidak dicadangkan tidak dicadangkan tidak dicadangkan
TABLESAMPLE tidak dicadangkan tidak dicadangkan dicadangkan
TBLPROPERTIES tidak dicadangkan tidak dicadangkan tidak dicadangkan
TEMP tidak dicadangkan tidak dicadangkan bukan kata kunci
SEMENTARA tidak dicadangkan tidak dicadangkan tidak dicadangkan
DIAKHIRI tidak dicadangkan tidak dicadangkan tidak dicadangkan
MAKA dicadangkan tidak dicadangkan dicadangkan
WAKTU dicadangkan tidak dicadangkan dicadangkan
KE dicadangkan tidak dicadangkan dicadangkan
SENTUH tidak dicadangkan tidak dicadangkan tidak dicadangkan
Tertinggal dicadangkan tidak dicadangkan dicadangkan
TRANSAKSI tidak dicadangkan tidak dicadangkan tidak dicadangkan
TRANSAKSI tidak dicadangkan tidak dicadangkan tidak dicadangkan
MENGUBAH tidak dicadangkan tidak dicadangkan tidak dicadangkan
PANGKAS tidak dicadangkan tidak dicadangkan tidak dicadangkan
BENAR tidak dicadangkan tidak dicadangkan dicadangkan
MEMANGKAS tidak dicadangkan tidak dicadangkan dicadangkan
TRY_CAST tidak dicadangkan tidak dicadangkan tidak dicadangkan
JENIS tidak dicadangkan tidak dicadangkan tidak dicadangkan
TIDAK BERSERTIFIKAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
TIDAK TERIKAT tidak dicadangkan tidak dicadangkan tidak dicadangkan
Bersihkan Cache tidak dicadangkan tidak dicadangkan tidak dicadangkan
GABUNGAN dicadangkan ketat yang tidak dicadangkan dicadangkan
UNIK dicadangkan tidak dicadangkan dicadangkan
TIDAK DIKETAHUI dicadangkan tidak dicadangkan dicadangkan
Buka Kunci tidak dicadangkan tidak dicadangkan tidak dicadangkan
UNSET tidak dicadangkan tidak dicadangkan tidak dicadangkan
UPDATE tidak dicadangkan tidak dicadangkan dicadangkan
GUNAKAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
PENGGUNA dicadangkan tidak dicadangkan dicadangkan
Menggunakan dicadangkan ketat yang tidak dicadangkan dicadangkan
VALUES tidak dicadangkan tidak dicadangkan dicadangkan
TAMPILAN tidak dicadangkan tidak dicadangkan tidak dicadangkan
VIEWS tidak dicadangkan tidak dicadangkan tidak dicadangkan
KAPAN dicadangkan tidak dicadangkan dicadangkan
WHERE dicadangkan tidak dicadangkan dicadangkan
WINDOW tidak dicadangkan tidak dicadangkan dicadangkan
DENGAN dicadangkan tidak dicadangkan dicadangkan
TAHUN tidak dicadangkan tidak dicadangkan tidak dicadangkan
ZONA tidak dicadangkan tidak dicadangkan tidak dicadangkan