BUAT BASIS DATA - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

BUAT BASIS DATA

Membuat database baru.

Untuk membuat database, Anda harus menjadi superuser atau memiliki hak istimewa CREATEDB.

Anda tidak dapat menjalankan CREATE DATABASE dalam blok transaksi (MULAI... AKHIR). Untuk informasi lebih lanjut tentang transaksi, lihatIsolasi yang dapat diserialisasi.

Sintaks

CREATE DATABASE database_name [ WITH ] [ OWNER [=] db_owner ] [ CONNECTION LIMIT { limit | UNLIMITED } ] [ COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE } ] [ ISOLATION LEVEL { SERIALIZABLE | SNAPSHOT } ] [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF [ ACCOUNT account_id ] NAMESPACE namespace_guid | [ FROM ARN '<arn>' { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } [ IAM_ROLE default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ] ]

Parameter

database_name

Nama database baru. Untuk informasi selengkapnya tentang nama yang valid, lihatNama dan pengidentifikasi.

DENGAN

Kata kunci opsional.

PEMILIK

Menentukan pemilik database.

=

Karakter opsional.

db_pemilik

Nama pengguna untuk pemilik database.

BATAS KONEKSI {limit | UNLIMITED}

Jumlah maksimum koneksi database pengguna diizinkan untuk membuka secara bersamaan. Batas tidak diberlakukan untuk pengguna super. Gunakan kata kunci UNLIMITED untuk memungkinkan jumlah maksimum koneksi bersamaan. Batas jumlah koneksi untuk setiap pengguna mungkin juga berlaku. Untuk informasi selengkapnya, lihat BUAT PENGGUNA. Defaultnya adalah UNLIMITED. Untuk melihat koneksi saat ini, kueri tampilan STV_SESSION sistem.

catatan

Jika batas koneksi pengguna dan database berlaku, slot koneksi yang tidak digunakan harus tersedia yang berada dalam kedua batas saat pengguna mencoba untuk terhubung.

COLLATE {CASE_SENSITIVE | CASE_INSENSITIVE}

Klausa yang menentukan apakah pencarian string atau perbandingan adalah CASE_SENSITIVE atau CASE_INSENSITIVE. Defaultnya adalah CASE_SENSITIVE.

TINGKAT ISOLASI {SERIALIZABLE | SNAPSHOT}

Sebuah klausa yang menentukan tingkat isolasi yang digunakan ketika query dijalankan terhadap database.

  • Isolasi SERIALIZABLE — menyediakan serialisasi penuh untuk transaksi bersamaan. Ini adalah default untuk database yang dibuat dalam cluster yang disediakan. Untuk informasi selengkapnya, lihat Isolasi yang dapat diserialisasi.

  • Isolasi SNAPSHOT — menyediakan tingkat isolasi dengan perlindungan terhadap pembaruan dan penghapusan konflik. Ini adalah default untuk database yang dibuat dalam namespace tanpa server.

Anda dapat melihat model konkurensi mana yang dijalankan database Anda sebagai berikut:

  • Kueri tampilan katalog STV_DB_ISOLATION_LEVEL. Untuk informasi selengkapnya, lihat STV_DB_ISOLASI_TINGKAT.

    SELECT * FROM stv_db_isolation_level;
  • Kueri tampilan PG_DATABASE_INFO.

    SELECT datname, datconfig FROM pg_database_info;

    Tingkat isolasi per database muncul di sebelah kunciconcurrency_model. Nilai 1 menunjukkan SNAPSHOT. Nilai 2 menunjukkan SERIALIZABLE.

Dalam database Amazon Redshift, isolasi SERIALIZABLE dan SNAPSHOT adalah jenis tingkat isolasi serial. Artinya, pembacaan kotor, pembacaan yang tidak dapat diulang, dan pembacaan hantu dicegah sesuai dengan standar SQL. Kedua tingkat isolasi menjamin bahwa transaksi beroperasi pada snapshot data seperti yang ada ketika transaksi dimulai, dan bahwa tidak ada transaksi lain yang dapat mengubah snapshot itu. Namun, isolasi SNAPSHOT tidak memberikan serialisasi penuh, karena tidak mencegah sisipan miring tulis dan pembaruan pada baris tabel yang berbeda.

Skenario berikut menggambarkan pembaruan kemiringan tulis menggunakan tingkat isolasi SNAPSHOT. Sebuah tabel bernama Numbers berisi kolom bernama digits yang berisi 0 dan 1 nilai-nilai. Setiap pernyataan UPDATE pengguna tidak tumpang tindih dengan pengguna lain. Namun, 1 nilai 0 dan ditukar. SQL yang mereka jalankan mengikuti timeline ini dengan hasil ini:

Waktu Pengguna 1 tindakan Tindakan Pengguna 2
1 MULAI;
2 MULAI;
3 PILIH * DARI Angka;
digits
------
0
1
4 PILIH * DARI Angka;
digits
------
0
1
5 UPDATE Nomor SET digit = 0 DIMANA digit = 1;
6 PILIH * DARI Angka;
digits
------
0
0
7 BERKOMITMEN;
8 Perbarui Nomor SET digit = 1 WHERE digit = 0;
9 PILIH * DARI Angka;
digits
------
1
1
10 BERKOMITMEN;
11 PILIH * DARI Angka;
digits
------
1
0
12 PILIH * DARI Angka;
digits
------
1
0

Jika skenario yang sama dijalankan menggunakan isolasi yang dapat diserialisasi, Amazon Redshift menghentikan pengguna 2 karena pelanggaran serial dan mengembalikan kesalahan. 1023 Untuk informasi selengkapnya, lihat Cara memperbaiki kesalahan isolasi yang dapat diserialisasi. Dalam hal ini, hanya pengguna 1 yang dapat melakukan komit dengan sukses. Tidak semua beban kerja memerlukan isolasi serial sebagai persyaratan, dalam hal ini isolasi snapshot cukup sebagai tingkat isolasi target untuk database Anda.

<ARN>ARN ''

AWS Glue Basis data ARN yang digunakan untuk membuat database.

<schema>{TANPA SKEMA KATALOG DATA | SKEMA KATALOG DATA ''}
catatan

Parameter ini hanya berlaku jika perintah CREATE DATABASE Anda juga menggunakan parameter FROM ARN.

Menentukan apakah untuk membuat database menggunakan skema untuk membantu mengakses objek di. AWS Glue Data Catalog

IAM_ROLE {default | 'SESI' | 'arn:aws:iam:: < -id>:role/ '}Akun AWS <role-name>
catatan

Parameter ini hanya berlaku jika perintah CREATE DATABASE Anda juga menggunakan parameter FROM ARN.

Jika Anda menentukan peran IAM yang terkait dengan cluster saat menjalankan perintah CREATE DATABASE, Amazon Redshift akan menggunakan kredenal peran saat Anda menjalankan kueri pada database.

Menentukan default kata kunci berarti menggunakan peran IAM yang ditetapkan sebagai default dan terkait dengan cluster.

Gunakan 'SESSION' jika Anda terhubung ke klaster Amazon Redshift menggunakan identitas federasi dan mengakses tabel dari skema eksternal yang dibuat menggunakan perintah ini. Untuk contoh penggunaan identitas federasi, lihat Menggunakan identitas federasi untuk mengelola akses Amazon Redshift ke sumber daya lokal dan tabel eksternal Amazon Redshift Spectrum, yang menjelaskan cara mengonfigurasi identitas federasi.

Gunakan Amazon Resource Name (ARN) untuk peran IAM yang digunakan klaster Anda untuk autentikasi dan otorisasi. Minimal, peran IAM harus memiliki izin untuk melakukan operasi LIST di bucket Amazon S3 untuk diakses dan operasi GET pada objek Amazon S3 yang berisi bucket. Untuk mempelajari lebih lanjut tentang menggunakan IAM_ROLE saat membuat database yang menggunakan AWS Glue Data Catalog untuk datashares, lihat Bekerja dengan jaringan data yang dikelola Lake Formation sebagai konsumen.

Berikut ini menunjukkan sintaks untuk string parameter IAM_ROLE untuk ARN tunggal.

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

Anda dapat merantai peran sehingga klaster Anda dapat mengambil peran IAM lain, mungkin milik akun lain. Anda dapat merantai hingga 10 peran. Untuk informasi selengkapnya, lihat Merantai peran IAM dalam Amazon Redshift Spectrum.

Untuk peran IAM ini, lampirkan kebijakan izin IAM yang serupa dengan yang berikut ini.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessSecret", "Effect": "Allow", "Action": [ "secretsmanager:GetResourcePolicy", "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:ListSecretVersionIds" ], "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy" }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "secretsmanager:GetRandomPassword", "secretsmanager:ListSecrets" ], "Resource": "*" } ] }

Untuk langkah-langkah untuk membuat peran IAM yang akan digunakan dengan kueri federasi, lihat. Membuat rahasia dan peran IAM untuk menggunakan kueri federasi

catatan

Jangan sertakan spasi dalam daftar peran yang dirantai.

Berikut ini menunjukkan sintaks untuk rantai tiga peran.

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'

Sintaks untuk menggunakan CREATE DATABASE dengan datashare

Sintaks berikut menjelaskan perintah CREATE DATABASE yang digunakan untuk membuat database dari datashare untuk berbagi data dalam akun yang sama. AWS

CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF [ ACCOUNT account_id ] NAMESPACE namespace_guid

Sintaks berikut menjelaskan perintah CREATE DATABASE yang digunakan untuk membuat database dari datashare untuk berbagi data di seluruh akun. AWS

CREATE DATABASE database_name [ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name ] OF ACCOUNT account_id NAMESPACE namespace_guid

Parameter untuk menggunakan CREATE DATABASE dengan datashare

DARI DATASHARE

Kata kunci yang menunjukkan di mana datashare berada.

datashare_name

Nama datashare tempat basis data konsumen dibuat.

DENGAN IZIN

Menentukan bahwa database yang dibuat dari datashare memerlukan izin tingkat objek untuk mengakses objek database individu. Tanpa klausa ini, pengguna atau peran yang diberikan izin PENGGUNAAN pada database akan secara otomatis memiliki akses ke semua objek database dalam database.

NAMESPACE namespace_guid

Nilai yang menentukan namespace produsen yang dimiliki datashare.

ACCOUNT account_id

Nilai yang menentukan akun produsen yang dimiliki datashare.

Catatan penggunaan untuk CREATE DATABASE untuk berbagi data

Sebagai superuser database, saat Anda menggunakan CREATE DATABASE untuk membuat database dari datashares dalam AWS akun, tentukan opsi NAMESPACE. Opsi AKUN adalah opsional. Bila Anda menggunakan CREATE DATABASE untuk membuat database dari datashares di seluruh AWS account, tentukan kedua ACCOUNT dan NAMESPACE dari produsen.

Anda hanya dapat membuat satu database konsumen untuk satu datashare di cluster konsumen. Anda tidak dapat membuat beberapa database konsumen yang mengacu pada datashare yang sama.

BUAT DATABASE dari AWS Glue Data Catalog

Untuk membuat database menggunakan database ARN, tentukan ARN dalam perintah CREATE AWS Glue DATABASE Anda.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;

Secara opsional, Anda juga dapat memberikan nilai ke dalam parameter IAM_ROLE. Untuk informasi selengkapnya tentang parameter dan nilai yang diterima, lihat Parameter.

Berikut ini adalah contoh yang menunjukkan cara membuat database dari ARN menggunakan peran IAM.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;

Anda juga dapat membuat database menggunakan SKEMA KATALOG DATA.

CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;

BUAT batas DATABASE

Amazon Redshift memberlakukan batasan ini untuk database:

  • Maksimal 60 basis data yang ditentukan pengguna per cluster.

  • Maksimum 127 byte untuk nama database.

  • Nama database tidak bisa menjadi kata yang dicadangkan.

Pengumpulan basis data

Collation adalah seperangkat aturan yang mendefinisikan bagaimana mesin database membandingkan dan mengurutkan data tipe karakter dalam SQL. Pemeriksaan case-insensitive adalah pemeriksaan yang paling umum digunakan. Amazon Redshift menggunakan pemeriksaan case-insensitive untuk memfasilitasi migrasi dari sistem gudang data lainnya. Dengan dukungan asli dari pemeriksaan case-insensitive, Amazon Redshift terus menggunakan metode penyetelan atau pengoptimalan penting, seperti kunci distribusi, kunci sortir, atau pemindaian terbatas rentang.

Klausa COLLATE menentukan pemeriksaan default untuk semua kolom CHAR dan VARCHAR dalam database. Jika CASE_INSENSITIVE ditentukan, semua kolom CHAR atau VARCHAR menggunakan pemeriksaan case-insensitive. Untuk informasi tentang pemeriksaan, lihatUrutan pemeriksaan.

Data yang dimasukkan atau dicerna dalam kolom case-insensitive akan menyimpan case aslinya. Tetapi semua operasi string berbasis perbandingan termasuk penyortiran dan pengelompokan tidak peka huruf besar/kecil. Operasi pencocokan pola seperti predikat LIKE, mirip dengan, dan fungsi ekspresi reguler juga tidak peka huruf besar/kecil.

Operasi SQL berikut mendukung semantik pemeriksaan yang berlaku:

  • Operator perbandingan: =, <>, <, <=, >, >=.

  • Seperti operator

  • ORDER BY klausa

  • Klausul GROUP BY

  • Fungsi agregat yang menggunakan perbandingan string, seperti MIN dan MAX dan LISTAGG

  • Fungsi jendela, seperti klausa PARTITION BY dan klausa ORDER BY

  • Fungsi skalar terbesar () dan terkecil (), STRPOS (), REGEXP_COUNT (), REGEXP_REPLACE (), REGEXP_INSTR (), REGEXP_SUBSTR ()

  • Klausa yang berbeda

  • UNION, INTERSECT dan KECUALI

  • DALAM DAFTAR

Untuk kueri eksternal, termasuk kueri federasi Amazon Redshift Spectrum dan Aurora PostgreSQL, pengumpulan kolom VARCHAR atau CHAR sama dengan pengumpulan tingkat database saat ini.

Contoh berikut menanyakan tabel Amazon Redshift Spectrum:

SELECT ci_varchar FROM spectrum.test_collation WHERE ci_varchar = 'AMAZON'; ci_varchar ---------- amazon Amazon AMAZON AmaZon (4 rows)

Untuk informasi tentang cara membuat tabel menggunakan pemeriksaan database, lihatCREATE TABLE.

Untuk informasi tentang fungsi COLLATE, lihatFungsi COLLATE.

Batasan pemeriksaan basis data

Berikut ini adalah batasan saat bekerja dengan pemeriksaan database di Amazon Redshift:

  • Semua tabel atau tampilan sistem, termasuk tabel katalog PG dan tabel sistem Amazon Redshift peka huruf besar/kecil.

  • Ketika database konsumen dan database produsen memiliki kumpulan tingkat database yang berbeda, Amazon Redshift tidak mendukung kueri lintas basis data dan lintas klaster.

  • Amazon Redshift tidak mendukung pemeriksaan case-insensitive dalam kueri khusus node pemimpin.

    Contoh berikut menunjukkan kueri case-insensitive yang tidak didukung dan kesalahan yang dikirimkan Amazon Redshift:

    SELECT collate(usename, 'case_insensitive') FROM pg_user; ERROR: Case insensitive collation is not supported in leader node only query.
  • Amazon Redshift tidak mendukung interaksi antara kolom case-sensitive dan case-sensitive, seperti perbandingan, fungsi, gabungan, atau operasi set.

    Contoh berikut menunjukkan kesalahan saat kolom peka huruf besar/kecil dan tidak peka huruf besar/kecil berinteraksi:

    CREATE TABLE test (ci_col varchar(10) COLLATE case_insensitive, cs_col varchar(10) COLLATE case_sensitive, cint int, cbigint bigint);
    SELECT ci_col = cs_col FROM test; ERROR: Query with different collations is not supported yet.
    SELECT concat(ci_col, cs_col) FROM test; ERROR: Query with different collations is not supported yet.
    SELECT ci_col FROM test UNION SELECT cs_col FROM test; ERROR: Query with different collations is not supported yet.
    SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col; ERROR: Query with different collations is not supported yet.
    Select Coalesce(ci_col, cs_col) from test; ERROR: Query with different collations is not supported yet.
    Select case when cint > 0 then ci_col else cs_col end from test; ERROR: Query with different collations is not supported yet.
  • Amazon Redshift tidak mendukung pemeriksaan untuk tipe data SUPER. Membuat kolom SUPER dalam database case-insensitive dan interaksi antara SUPER dan kolom case-insensitive tidak didukung.

    Contoh berikut membuat tabel dengan SUPER sebagai tipe data dalam database case-insensitive:

    CREATE TABLE super_table (a super); ERROR: SUPER column is not supported in case insensitive database.

    Contoh berikut menanyakan data dengan string case-insensitive dibandingkan dengan data SUPER:

    CREATE TABLE test_super_collation (s super, c varchar(10) COLLATE case_insensitive, i int);
    SELECT s = c FROM test_super_collation; ERROR: Coercing from case insensitive string to SUPER is not supported.

Untuk membuat kueri ini berfungsi, gunakan fungsi COLLATE untuk mengonversi pemeriksaan satu kolom agar sesuai dengan yang lain. Untuk informasi selengkapnya, lihat Fungsi COLLATE.

Contoh-contoh

Membuat basis data

Contoh berikut membuat database bernama TICKIT dan memberikan kepemilikan kepada pengguna DWUSER.

create database tickit with owner dwuser;

Untuk melihat detail tentang database, kueri tabel katalog PG_DATABASE_INFO.

select datname, datdba, datconnlimit from pg_database_info where datdba > 1; datname | datdba | datconnlimit -------------+--------+------------- admin | 100 | UNLIMITED reports | 100 | 100 tickit | 100 | 100

Contoh berikut membuat database bernama sampledb dengan tingkat isolasi SNAPSHOT.

CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;

Contoh berikut membuat database sales_db dari datashare salesshare.

CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

Contoh pengumpulan basis data

Membuat database case-insensitive

Contoh berikut membuat sampledb database, membuat T1 tabel, dan menyisipkan data ke dalam T1 tabel.

create database sampledb collate case_insensitive;

Connect ke database baru yang baru saja Anda buat menggunakan klien SQL Anda. Saat menggunakan editor kueri Amazon Redshift v2, pilih sampledb di Editor. Saat menggunakan RSQL, gunakan perintah seperti berikut ini.

\connect sampledb;
CREATE TABLE T1 ( col1 Varchar(20) distkey sortkey );
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');

Kemudian kueri menemukan hasil denganJohn.

SELECT * FROM T1 WHERE col1 = 'John'; col1 ------ john JOHN (2 row)
Memesan dalam urutan tidak peka huruf besar/kecil

Contoh berikut menunjukkan urutan case-insensitive dengan tabel T1. Urutan Bob dan bob atau John dan john adalah nondeterministik karena mereka sama dalam kolom case-insensitive.

SELECT * FROM T1 ORDER BY 1; col1 ------ bob Bob JOHN john Mary (5 rows)

Demikian pula, contoh berikut menunjukkan urutan case-insensitive dengan klausa GROUP BY. Bob dan bob sama dan termasuk dalam kelompok yang sama. Adalah nondeterministik yang mana yang muncul dalam hasilnya.

SELECT col1, count(*) FROM T1 GROUP BY 1; col1 | count -----+------ Mary | 1 bob | 2 JOHN | 2 (3 rows)
Menanyakan dengan fungsi jendela pada kolom yang tidak peka huruf besar/kecil

Contoh berikut query fungsi jendela pada kolom case-insensitive.

SELECT col1, rank() over (ORDER BY col1) FROM T1; col1 | rank -----+------ bob | 1 Bob | 1 john | 3 JOHN | 3 Mary | 5 (5 rows)
Query dengan kata kunci DISTINCT

Contoh berikut query T1 tabel dengan kata kunci DISTINCT.

SELECT DISTINCT col1 FROM T1; col1 ------ bob Mary john (3 rows)
Menanyakan dengan klausa UNION

Contoh berikut menunjukkan hasil dari UNION tabel T1 danT2.

CREATE TABLE T2 AS SELECT * FROM T1;
SELECT col1 FROM T1 UNION SELECT col1 FROM T2; col1 ------ john bob Mary (3 rows)