Kepatuhan ANSI dalam Databricks Runtime
Berlaku untuk: 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
.
Saat spark.sql.ansi.enabled
disetel ke true
, SQL Spark menggunakan dialek yang sesuai dengan ANSI alih-alih sesuai dengan Apache Hive. Misalnya, Spark akan memberikan pengecualian saat runtime alih-alih mengembalikan hasil null jika input ke operator/fungsi SQL tidak valid. Beberapa fitur dialek ANSI mungkin bukan dari standar SQL ANSI secara langsung, tetapi perilakunya selaras dengan gaya SQL ANSI.
Selain itu, Spark SQL memiliki opsi independen untuk mengontrol perilaku transmisi implisit saat menyimpan baris dalam tabel. Perilaku transmisi didefinisikan sebagai aturan penetapan penyimpanan dalam standar.
Saat spark.sql.storeAssignmentPolicy
ditetapkan ke ANSI
, SQL Spark mematuhi aturan penugasan penyimpanan ANSI. Ini adalah konfigurasi terpisah karena nilai defaultnya adalah ANSI
, sedangkan konfigurasi spark.sql.ansi.enabled
dinonaktifkan secara default.
Tabel berikut ini meringkas hasilnya:
Nama Properti | Default | Makna |
---|---|---|
spark.sql.ansi.enabled |
salah | Jika benar, Spark mencoba menyesuaikan dengan spesifikasi SQL ANSI: - Melemparkan pengecualian runtime jika luapan terjadi dalam operasi apa pun pada bilangan bulat atau bidang desimal. - Melarang penggunaan kata kunci khusus ANSI SQL sebagai pengidentifikasi di pengurai SQL. |
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 jenis konversi eksplisit sesuai SQL ANSI. 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 konversi eksplisit jenis selama jenisnya adalah Transmisi valid, yang sifatanya sangat longgar. 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 kemungkinan kehilangan presisi atau pemotongan data dalam konversi eksplisit jenis, misalnya, mengonversi ganda ke int atau desimal ke ganda tidak diperbolehkan. |
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.
Saat spark.sql.ansi.enabled
diatur ke true
dan luapan terjadi dalam operasi aritmatika numerik dan interval, proses itu akan memberikan pengecualian aritmatika saat runtime.
-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
error: integer overflow
-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
-2147483648
Transmisi
Saat spark.sql.ansi.enabled
diatur ke true
, transmisi eksplisit dengan sintaks CAST
akan memberikan pengecualian runtime untuk pola transmisi 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 yang valid dari jenis data sumber dan target 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 | Interval | Boolean | Biner | Array | Peta | Struktur |
---|---|---|---|---|---|---|---|---|---|---|
Numerik | Y | Y | N | N | N | Y | N | N | N | N |
String | Y | Y | Y | Y | Y | Y | Y | N | N | N |
Tanggal | N | Y | Y | Y | N | N | N | N | N | N |
Tanda Waktu | N | Y | Y | Y | N | N | N | N | N | N |
Interval | N | Y | N | N | Y | N | N | N | N | N |
Boolean | Y | Y | N | N | N | Y | N | N | N | N |
Biner | Y | N | N | N | N | N | Y | N | N | N |
Array | N | N | N | N | N | N | N | Y | N | N |
Peta | N | N | N | N | N | N | N | N | Y | N |
Struktur | N | N | N | N | N | N | N | N | N | Y |
-- 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` (This is a default behavior)
> 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 pernyataan INSERT.
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.
spark.sql.storeAssignmentPolicy
Ketika 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
, SQL Spark menggunakan beberapa aturan yang mengatur cara konflik antar jenis data diselesaikan.
Inti dari resolusi konflik ini adalah Daftar Prioritas Jenis yang menentukan apakah nilai dari jenis data tertentu dapat dipromosikan ke jenis data lain secara implisit.
Jenis Data | daftar prioritas (dari yang tersempit ke terluas) |
---|---|
Byte | Byte -> Pendek -> Int -> Panjang -> Desimal -> Float* -> Ganda |
Pendek | Pendek -> Int -> Panjang -> Desimal-> Float* -> Ganda |
Int | Int -> Panjang -> Desimal -> Float* -> Ganda |
Panjang | Panjang -> Desimal -> Float* -> Ganda |
Decimal | Desimal -> Float* -> Ganda |
Float | Float -> Ganda |
Laju | Laju |
Tanggal | Tanggal -> Stempel waktu |
Tanda Waktu | Tanda Waktu |
String | String |
Biner | Biner |
Boolean | Boolean |
Interval | Interval |
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:
Resolusi Jenis yang Paling Tidak Umum
Jenis yang paling tidak umum dari kumpulan jenis adalah jenis tersempit yang dapat dijangkau dari daftar prioritas oleh semua elemen 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.
- Memperoleh jenis argumen untuk fungsi yang mengharapkan jenis argumen bersama untuk beberapa parameter, seperti gabungan, terkecil, 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 akan didorong ke DOUBLE untuk menghindari potensi kehilangan 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.
- Fungsi ini menampilkan
elt
: Fungsi ini menampilkanArrayIndexOutOfBoundsException
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 menampilkanIllegalArgumentException
jika input bukan hari yang valid dalam seminggu.parse_url
: Fungsi ini menampilkanIllegalArgumentException
jika input string bukan url yang valid.to_date
: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diuraikan, atau string pola tidak valid.to_timestamp
: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diuraikan, atau string pola tidak valid.to_unix_timestamp
: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diuraikan, atau string pola tidak valid.unix_timestamp
: Fungsi ini gagal dengan pengecualian jika string input tidak dapat diuraikan, 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 menampilkanArrayIndexOutOfBoundsException
jika menggunakan indeks yang tidak valid.map_col[key]
: Operator ini menampilkanNoSuchElementException
jika kunci tidak ada di peta.CAST(string_col AS TIMESTAMP)
: Operator ini gagal dengan pengecualian jika string input tidak dapat diuraikan.CAST(string_col AS DATE)
: Operator ini gagal dengan pengecualian jika string input tidak dapat diuraikan.
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 denganCAST
, kecuali bahwa ia menampilkan hasilNULL
alih-alih memberikan pengecualian pada kesalahan runtime.try_add
: identik dengan operator tambah+
, kecuali bahwa ia menampilkan hasilNULL
alih-alih menampilkan pengecualian pada luapan nilai integral.try_divide
: identik dengan operator pembagian/
, kecuali bahwa itu mengembalikan hasilNULL
alih-alih memberikan pengecualian pada pembagian 0.
Kata kunci SQL
Jika spark.sql.ansi.enabled
bernilai true, SQL Spark akan menggunakan pengurai mode ANSI.
Dalam mode ini, SQL Spark memiliki dua jenis kata kunci:
- Kata kunci yang dicadangkan: Kata kunci yang dicadangkan dan tidak dapat digunakan sebagai pengidentifikasi untuk tabel, tampilan, kolom, fungsi, alias, dll.
- Kata kunci yang tidak dicadangkan: Kata kunci yang memiliki arti khusus hanya dalam konteks tertentu dan dapat digunakan sebagai pengidentifikasi dalam konteks lain. Misalnya,
EXPLAIN SELECT ...
adalah perintah, tetapi EXPLAIN dapat digunakan sebagai pengidentifikasi di tempat lain.
Ketika mode ANSI dinonaktifkan, SQL Spark memiliki dua jenis kata kunci:
- Kata kunci yang tidak dicadangkan: Definisi yang sama dengan yang ada saat mode ANSI diaktifkan.
- Kata kunci yang ketat yang tidak dicadangkan: Versi ketat dari kata kunci yang tidak dicadangkan, yang tidak dapat digunakan sebagai alias tabel.
Secara default, spark.sql.ansi.enabled
bernilai false.
Di bawah ini adalah daftar semua kata kunci di SQL Spark.
Kata kunci | Spark SQL ANSI Mode | Spark SQL Default Mode | SQL-2016 |
---|---|---|---|
ADD | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
AFTER | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SEMUA | dicadangkan | tidak dicadangkan | dicadangkan |
ALTER | tidak dicadangkan | tidak dicadangkan | dicadangkan |
ALWAYS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
ANALYZE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
AND | dicadangkan | tidak dicadangkan | dicadangkan |
ANTI | tidak dicadangkan | ketat yang tidak dicadangkan | tidak dicadangkan |
ANY | dicadangkan | tidak dicadangkan | dicadangkan |
ARCHIVE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
ARRAY | tidak dicadangkan | tidak dicadangkan | dicadangkan |
AS | dicadangkan | tidak dicadangkan | dicadangkan |
ASC | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
AT | tidak dicadangkan | tidak dicadangkan | dicadangkan |
AUTHORIZATION | dicadangkan | tidak dicadangkan | dicadangkan |
BETWEEN | tidak dicadangkan | tidak dicadangkan | dicadangkan |
BOTH | dicadangkan | tidak dicadangkan | dicadangkan |
BUCKET | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
BUCKETS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
BY | tidak dicadangkan | tidak dicadangkan | dicadangkan |
CACHE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CASCADE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CASE | dicadangkan | tidak dicadangkan | dicadangkan |
CAST | dicadangkan | tidak dicadangkan | dicadangkan |
CHANGE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CHECK | dicadangkan | tidak dicadangkan | dicadangkan |
KOSONGKAN | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CLUSTER | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CLUSTERED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CODEGEN | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
COLLATE | dicadangkan | tidak dicadangkan | dicadangkan |
KUMPULAN | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
KOLOM | dicadangkan | tidak dicadangkan | dicadangkan |
COLUMNS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
KOMENTAR | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
COMMIT | tidak dicadangkan | tidak dicadangkan | dicadangkan |
COMPACT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
COMPACTIONS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
COMPUTE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CONCATENATE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CONSTRAINT | dicadangkan | tidak dicadangkan | dicadangkan |
COST | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
CREATE | dicadangkan | tidak dicadangkan | dicadangkan |
CROSS | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
CUBE | tidak dicadangkan | tidak dicadangkan | dicadangkan |
CURRENT | tidak dicadangkan | tidak dicadangkan | dicadangkan |
CURRENT_DATE | dicadangkan | tidak dicadangkan | dicadangkan |
CURRENT_TIME | dicadangkan | tidak dicadangkan | dicadangkan |
CURRENT_TIMESTAMP | dicadangkan | tidak dicadangkan | dicadangkan |
CURRENT_USER | dicadangkan | tidak dicadangkan | dicadangkan |
DATA | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DATABASE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DATABASES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DAY | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DBPROPERTIES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DEFINED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DELETE | tidak dicadangkan | tidak dicadangkan | dicadangkan |
DELIMITED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DESC | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
URAIKAN | tidak dicadangkan | tidak dicadangkan | dicadangkan |
DFS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DIRECTORIES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DIREKTORI | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
NYATA | dicadangkan | tidak dicadangkan | dicadangkan |
DISTRIBUTE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DIV | tidak dicadangkan | tidak dicadangkan | bukan kata kunci |
DROP | tidak dicadangkan | tidak dicadangkan | dicadangkan |
ELSE | dicadangkan | tidak dicadangkan | dicadangkan |
END | dicadangkan | tidak dicadangkan | dicadangkan |
ESCAPE | dicadangkan | tidak dicadangkan | dicadangkan |
ESCAPED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
KECUALI | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
PERTUKARAN | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
EXISTS | tidak dicadangkan | tidak dicadangkan | dicadangkan |
EXPLAIN | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
EXPORT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
EXTENDED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
EKSTERNAL | tidak dicadangkan | tidak dicadangkan | dicadangkan |
EKSTRAK | tidak dicadangkan | tidak dicadangkan | dicadangkan |
SALAH | dicadangkan | tidak dicadangkan | dicadangkan |
FETCH | dicadangkan | tidak dicadangkan | dicadangkan |
FIELDS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SARINGAN | dicadangkan | tidak dicadangkan | dicadangkan |
FILEFORMAT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PERTAMA | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
FN | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
FOLLOWING | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
FOR | dicadangkan | tidak dicadangkan | dicadangkan |
ASING | dicadangkan | tidak dicadangkan | dicadangkan |
FORMAT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
FORMATTED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
DARI | dicadangkan | tidak dicadangkan | dicadangkan |
FULL | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
FUNGSI | tidak dicadangkan | tidak dicadangkan | dicadangkan |
FUNCTIONS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
GENERATED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
GLOBAL | tidak dicadangkan | tidak dicadangkan | dicadangkan |
GRANT | dicadangkan | tidak dicadangkan | dicadangkan |
GRANTS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
GROUP | dicadangkan | tidak dicadangkan | dicadangkan |
GROUPING | tidak dicadangkan | tidak dicadangkan | dicadangkan |
MEMILIKI | dicadangkan | tidak dicadangkan | dicadangkan |
HOUR | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
JIKA | tidak dicadangkan | tidak dicadangkan | bukan kata kunci |
IGNORE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
IMPORT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
IN | dicadangkan | tidak dicadangkan | dicadangkan |
INDEX | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
INDEXES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
INNER | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
INPATH | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
INPUTFORMAT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
INSERT | tidak dicadangkan | tidak dicadangkan | dicadangkan |
PERPOTONGAN | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
INTERVAL | tidak dicadangkan | tidak dicadangkan | dicadangkan |
INTO | dicadangkan | tidak dicadangkan | dicadangkan |
IS | dicadangkan | tidak dicadangkan | dicadangkan |
ITEMS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
IKUTI | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
KEY | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
KUNCI | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LAST | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LATERAL | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
LAZY | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LEADING | dicadangkan | tidak dicadangkan | dicadangkan |
LEFT | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
LIKE | tidak dicadangkan | tidak dicadangkan | dicadangkan |
ILIKE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
BATAS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LINES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LIST | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LOAD | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LOKAL | tidak dicadangkan | tidak dicadangkan | dicadangkan |
LOCATION | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LOCK | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LOCKS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
LOGICAL | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
MACRO | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PETA | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
MATCHED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
GABUNG | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
MINUTE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
MINUS | tidak dicadangkan | ketat yang tidak dicadangkan | tidak dicadangkan |
MONTH | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
MSCK | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
NAMESPACE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
NAMESPACE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
NATURAL | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
TIDAK | tidak dicadangkan | tidak dicadangkan | dicadangkan |
TIDAK | dicadangkan | tidak dicadangkan | dicadangkan |
NULL | dicadangkan | tidak dicadangkan | dicadangkan |
NULL | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
OF | tidak dicadangkan | tidak dicadangkan | dicadangkan |
AKTIF | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
ONLY | dicadangkan | tidak dicadangkan | dicadangkan |
OPTION | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
OPSI | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
ATAU | dicadangkan | tidak dicadangkan | dicadangkan |
ORDER | dicadangkan | tidak dicadangkan | dicadangkan |
OUT | tidak dicadangkan | tidak dicadangkan | dicadangkan |
OUTER | dicadangkan | tidak dicadangkan | dicadangkan |
OUTPUTFORMAT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
OVER | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
OVERLAPS | dicadangkan | tidak dicadangkan | dicadangkan |
OVERLAY | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
MENIMPA | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PARTISI | tidak dicadangkan | tidak dicadangkan | dicadangkan |
PARTITIONED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PARTITIONS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PERCENT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PIVOT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PLACING | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
POSITION | tidak dicadangkan | tidak dicadangkan | dicadangkan |
PRECEDING | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PRIMARY | dicadangkan | tidak dicadangkan | dicadangkan |
PRINCIPALS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PROPERTIES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
HAPUS MENYELURUH | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
QUALIFY | dicadangkan | tidak dicadangkan | dicadangkan |
QUERY | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
RANGE | tidak dicadangkan | tidak dicadangkan | dicadangkan |
RECIPIENT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
RECIPIENTS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
RECORDREADER | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
RECORDWRITER | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
RECOVER | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
KURANGI | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
REFERENCES | 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 |
RENAME | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
REPAIR | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
REPLACE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
ATUR ULANG | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
RESPECT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
BATASI | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
REVOKE | tidak dicadangkan | tidak dicadangkan | dicadangkan |
RIGHT | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
RLIKE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PERAN | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
ROLES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
ROLLBACK | tidak dicadangkan | tidak dicadangkan | dicadangkan |
ROLLUP | tidak dicadangkan | tidak dicadangkan | dicadangkan |
BARIS | tidak dicadangkan | tidak dicadangkan | dicadangkan |
ROWS | tidak dicadangkan | tidak dicadangkan | dicadangkan |
SKEMA | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SCHEMAS | tidak dicadangkan | tidak dicadangkan | bukan kata kunci |
SECOND | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SELECT | dicadangkan | tidak dicadangkan | dicadangkan |
SEMI | tidak dicadangkan | ketat yang tidak dicadangkan | tidak dicadangkan |
SEPARATED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SERDE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SERDEPROPERTIES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SESSION_USER | dicadangkan | tidak dicadangkan | dicadangkan |
SET | tidak dicadangkan | tidak dicadangkan | dicadangkan |
SET | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SHARE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SHARES | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SHOW | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SKEWED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SOME | dicadangkan | tidak dicadangkan | dicadangkan |
SORT | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
SORTED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
MULAI | tidak dicadangkan | tidak dicadangkan | dicadangkan |
STATISTICS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
STORED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
STRATIFY | 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 |
TERMINATED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
THEN | dicadangkan | tidak dicadangkan | dicadangkan |
TIME | dicadangkan | tidak dicadangkan | dicadangkan |
TO | dicadangkan | tidak dicadangkan | dicadangkan |
TOUCH | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
TRAILING | dicadangkan | tidak dicadangkan | dicadangkan |
TRANSAKSI | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
TRANSACTIONS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
TRANSFORM | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
PANGKAS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
BENAR | tidak dicadangkan | tidak dicadangkan | dicadangkan |
TRUNCATE | tidak dicadangkan | tidak dicadangkan | dicadangkan |
TRY_CAST | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
TYPE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
UNARCHIVE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
UNBOUNDED | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
UNCACHE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
GABUNGAN | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
UNIQUE | dicadangkan | tidak dicadangkan | dicadangkan |
UNKNOWN | dicadangkan | tidak dicadangkan | dicadangkan |
UNLOCK | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
UNSET | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
UPDATE | tidak dicadangkan | tidak dicadangkan | dicadangkan |
USE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
USER | dicadangkan | tidak dicadangkan | dicadangkan |
USING | dicadangkan | ketat yang tidak dicadangkan | dicadangkan |
NILAI | tidak dicadangkan | tidak dicadangkan | dicadangkan |
VIEW | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
VIEWS | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
WHEN | dicadangkan | tidak dicadangkan | dicadangkan |
WHERE | dicadangkan | tidak dicadangkan | dicadangkan |
WINDOW | tidak dicadangkan | tidak dicadangkan | dicadangkan |
WITH | dicadangkan | tidak dicadangkan | dicadangkan |
YEAR | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |
ZONE | tidak dicadangkan | tidak dicadangkan | tidak dicadangkan |