View a markdown version of this page

Meneruskan pernyataan SQL ke gudang data Amazon Redshift - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

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

Meneruskan pernyataan SQL ke gudang data Amazon Redshift

Contoh di halaman ini mencakup berbagai cara untuk meneruskan pernyataan SQL ke gudang data Anda

Jalankan pernyataan SQL

Untuk menjalankan pernyataan SQL, gunakan aws redshift-data execute-statement AWS CLI perintah.

Secara opsional, gunakan WaitTimeSeconds parameter untuk memberikan waktu tambahan agar pernyataan selesai sebelum API mengembalikan respons. Ketika pernyataan selesai, tanggapan juga termasukStatus,RedshiftPid, danHasResultSet. Untuk informasi selengkapnya, lihat Kurangi panggilan API dengan polling panjang.

Per AWS CLI intah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan pengenal untuk mengambil hasil. Contoh ini menggunakan metode AWS Secrets Manager otentikasi.

aws redshift-data execute-statement --secret-arn arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --sql "select * from stl_query limit 1" --database dev

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598323175.823, "Database": "dev", "Id": "c016234e-5c6c-4bc5-bb16-2c5b8ff61814", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn" }

Per AWS CLI intah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan pengenal untuk mengambil hasil. Contoh ini menggunakan metode otentikasi kredenSIAL sementara.

aws redshift-data execute-statement --db-user myuser --cluster-identifier mycluster-test --database dev --sql "select * from stl_query limit 1"

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598306924.632, "Database": "dev", "DbUser": "myuser", "Id": "d9b6c0c9-0747-4bf4-b142-e8883122f766" }

Per AWS CLI intah berikut menjalankan pernyataan SQL terhadap workgroup tanpa server dan mengembalikan pengenal untuk mengambil hasil. Contoh ini menggunakan metode otentikasi kredenSIAL sementara.

aws redshift-data execute-statement --database dev --workgroup-name myworkgroup --sql "select 1;"

Berikut adalah contoh respons tersebut.

{ "CreatedAt": "2022-02-11T06:25:28.748000+00:00", "Database": "dev", "DbUser": "IAMR:RoleName", "Id": "89dd91f5-2d43-43d3-8461-f33aa093c41e", "WorkgroupName": "myworkgroup" }

Per AWS CLI intah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan pengenal untuk mengambil hasil. Contoh ini menggunakan metode AWS Secrets Manager otentikasi dan token idempotensi.

aws redshift-data execute-statement --secret-arn arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --sql "select * from stl_query limit 1" --database dev --client-token b855dced-259b-444c-bc7b-d3e8e33f94g1

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598323175.823, "Database": "dev", "Id": "c016234e-5c6c-4bc5-bb16-2c5b8ff61814", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn" }

Jalankan beberapa pernyataan SQL

Untuk menjalankan beberapa pernyataan SQL dengan satu perintah, gunakan aws redshift-data batch-execute-statement AWS CLI perintah.

Secara opsional, gunakan WaitTimeSeconds parameter untuk memberikan waktu tambahan untuk menyelesaikan seluruh batch sebelum API mengembalikan respons. Untuk informasi selengkapnya, lihat Kurangi panggilan API dengan polling panjang.

Per AWS CLI intah berikut menjalankan tiga pernyataan SQL terhadap cluster dan mengembalikan pengenal untuk mengambil hasil. Contoh ini menggunakan metode otentikasi kredenSIAL sementara.

aws redshift-data batch-execute-statement --db-user myuser --cluster-identifier mycluster-test --database dev --sqls "set timezone to BST" "select * from mytable" "select * from another_table"

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598306924.632, "Database": "dev", "DbUser": "myuser", "Id": "d9b6c0c9-0747-4bf4-b142-e8883122f766" }

Per AWS CLI intah berikut menjalankan tiga pernyataan SQL dalam transaksi terpisah menggunakan mode AUTO_COMMIT eksekusi. Setiap pernyataan dilakukan secara independen — kegagalan satu pernyataan tidak menghentikan pernyataan yang tersisa untuk berjalan atau memengaruhi pernyataan yang sudah selesai.

aws redshift-data batch-execute-statement --db-user myuser --cluster-identifier mycluster-test --database dev --sqls "insert into mytable values (1)" "invalid sql statement" "insert into mytable values (3)" --execution-mode AUTO_COMMIT

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1623979777.126, "Duration": 6591877, "HasResultSet": false, "Id": "b2906c76-fa6e-4cdf-8c5f-4de1ff9b7652", "RedshiftPid": 31459, "RedshiftQueryId": 0, "Status": "FAILED", "SubStatements": [ { "CreatedAt": 1623979777.274, "Duration": 3396637, "HasResultSet": false, "Id": "b2906c76-fa6e-4cdf-8c5f-4de1ff9b7652:1", "QueryString": "insert into mytable values (1)", "RedshiftQueryId": -1, "Status": "FINISHED", "UpdatedAt": 1623979777.903 }, { "CreatedAt": 1623979777.274, "Duration": 1195240, "HasResultSet": false, "Id": "b2906c76-fa6e-4cdf-8c5f-4de1ff9b7652:2", "QueryString": "invalid sql statement", "RedshiftQueryId": -1, "Error": "ERROR: syntax error at or near \"invalid\"", "Status": "FAILED", "UpdatedAt": 1623979777.503 }, { "CreatedAt": 1623979777.274, "Duration": 1095981, "HasResultSet": false, "Id": "b2906c76-fa6e-4cdf-8c5f-4de1ff9b7652:3", "QueryString": "insert into mytable values (3)", "RedshiftQueryId": -1, "Status": "FINISHED", "UpdatedAt": 1623979777.903 } ], "UpdatedAt": 1623979778.183 }

Jalankan pernyataan dengan parameter

Anda dapat menggunakan parameter bernama dengan batch-execute-statement operasi execute-statement dan. Saat menggunakanbatch-execute-statement, parameter dibagikan di semua pernyataan SQL dalam batch. Setiap pernyataan SQL dapat mereferensikan subset dari parameter yang disediakan, tetapi setiap parameter harus digunakan oleh setidaknya satu pernyataan SQL.

Per AWS CLI intah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan pengenal untuk mengambil hasil. Contoh ini menggunakan metode AWS Secrets Manager otentikasi. Teks SQL memiliki parameter bernamadistance. Dalam hal ini, jarak yang digunakan dalam predikat adalah5. Dalam pernyataan SELECT, parameter bernama untuk nama kolom hanya dapat digunakan dalam predikat. Nilai untuk parameter bernama untuk pernyataan SQL ditentukan dalam parameters opsi.

aws redshift-data execute-statement --secret-arn arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn --cluster-identifier mycluster-test --sql "SELECT ratecode FROM demo_table WHERE trip_distance > :distance" --parameters "[{\"name\": \"distance\", \"value\": \"5\"}]" --database dev

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598323175.823, "Database": "dev", "Id": "c016234e-5c6c-4bc5-bb16-2c5b8ff61814", "SecretArn": "arn:aws:secretsmanager:us-west-2:123456789012:secret:myuser-secret-hKgPWn" }

Contoh berikut menggunakan EVENT tabel dari database sampel. Untuk informasi selengkapnya, lihat tabel EV ENT di Panduan Pengembang Database Amazon Redshift.

Jika Anda belum memiliki EVENT tabel di database Anda, Anda dapat membuatnya menggunakan API Data sebagai berikut:

aws redshift-data execute-statement --database dev --cluster-id mycluster-test --db-user awsuser --sql "create table event( eventid integer not null distkey, venueid smallint not null, catid smallint not null, dateid smallint not null sortkey, eventname varchar(200), starttime timestamp)"

Perintah berikut menyisipkan satu baris ke dalam EVENT tabel.

aws redshift-data execute-statement --database dev --cluster-id mycluster-test --db-user awsuser --sql "insert into event values(:eventid, :venueid::smallint, :catid, :dateid, :eventname, :starttime)" --parameters "[{\"name\": \"eventid\", \"value\": \"1\"}, {\"name\": \"venueid\", \"value\": \"1\"}, {\"name\": \"catid\", \"value\": \"1\"}, {\"name\": \"dateid\", \"value\": \"1\"}, {\"name\": \"eventname\", \"value\": \"event 1\"}, {\"name\": \"starttime\", \"value\": \"2022-02-22\"}]"

Perintah berikut menyisipkan baris kedua ke dalam EVENT tabel. Contoh ini menunjukkan hal berikut:

  • Parameter bernama id digunakan empat kali dalam teks SQL.

  • Konversi tipe implisit diterapkan secara otomatis saat memasukkan parameterstarttime.

  • venueidKolom adalah tipe yang ditransfer ke tipe data SMALINT.

  • String karakter yang mewakili tipe data DATE secara implisit diubah menjadi tipe data TIMESTAMP.

  • Komentar dapat digunakan dalam teks SQL.

aws redshift-data execute-statement --database dev --cluster-id mycluster-test --db-user awsuser --sql "insert into event values(:id, :id::smallint, :id, :id, :eventname, :starttime) /*this is comment, and it won't apply parameterization for :id, :eventname or :starttime here*/" --parameters "[{\"name\": \"eventname\", \"value\": \"event 2\"}, {\"name\": \"starttime\", \"value\": \"2022-02-22\"}, {\"name\": \"id\", \"value\": \"2\"}]"

Berikut ini menunjukkan dua baris yang dimasukkan:

eventid | venueid | catid | dateid | eventname | starttime ---------+---------+-------+--------+-----------+--------------------- 1 | 1 | 1 | 1 | event 1 | 2022-02-22 00:00:00 2 | 2 | 2 | 2 | event 2 | 2022-02-22 00:00:00

Perintah berikut menggunakan parameter bernama dalam klausa WHERE untuk mengambil baris di mana eventid berada1.

aws redshift-data execute-statement --database dev --cluster-id mycluster-test --db-user awsuser --sql "select * from event where eventid=:id" --parameters "[{\"name\": \"id\", \"value\": \"1\"}]"

Jalankan perintah berikut untuk mendapatkan hasil SQL dari pernyataan SQL sebelumnya:

aws redshift-data get-statement-result --id 7529ad05-b905-4d71-9ec6-8b333836eb5a

Memberikan hasil berikut:

{ "Records": [ [ { "longValue": 1 }, { "longValue": 1 }, { "longValue": 1 }, { "longValue": 1 }, { "stringValue": "event 1" }, { "stringValue": "2022-02-22 00:00:00.0" } ] ], "ColumnMetadata": [ { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "eventid", "length": 0, "name": "eventid", "nullable": 0, "precision": 10, "scale": 0, "schemaName": "public", "tableName": "event", "typeName": "int4" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "venueid", "length": 0, "name": "venueid", "nullable": 0, "precision": 5, "scale": 0, "schemaName": "public", "tableName": "event", "typeName": "int2" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "catid", "length": 0, "name": "catid", "nullable": 0, "precision": 5, "scale": 0, "schemaName": "public", "tableName": "event", "typeName": "int2" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": true, "label": "dateid", "length": 0, "name": "dateid", "nullable": 0, "precision": 5, "scale": 0, "schemaName": "public", "tableName": "event", "typeName": "int2" }, { "isCaseSensitive": true, "isCurrency": false, "isSigned": false, "label": "eventname", "length": 0, "name": "eventname", "nullable": 1, "precision": 200, "scale": 0, "schemaName": "public", "tableName": "event", "typeName": "varchar" }, { "isCaseSensitive": false, "isCurrency": false, "isSigned": false, "label": "starttime", "length": 0, "name": "starttime", "nullable": 1, "precision": 29, "scale": 6, "schemaName": "public", "tableName": "event", "typeName": "timestamp" } ], "TotalNumRows": 1 }

Per AWS CLI intah berikut menjalankan dua pernyataan SQL dengan parameter bernama bersama terhadap cluster menggunakanbatch-execute-statement. Teks SQL telah menamai parameter id danname. Pernyataan SQL pertama menggunakan id parameter dan yang kedua menggunakan name parameter.

aws redshift-data batch-execute-statement --db-user myuser --cluster-identifier mycluster-test --database dev --sqls "SELECT * FROM mytable WHERE id = :id" "SELECT * FROM mytable WHERE name = :name" --parameters "[{\"name\": \"id\", \"value\": \"1\"},{\"name\": \"name\", \"value\": \"Alice\"}]"

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598306924.632, "Database": "dev", "DbUser": "myuser", "Id": "d9b6c0c9-0747-4bf4-b142-e8883122f766" }

Per AWS CLI intah berikut menjalankan dua pernyataan SQL di mana parameter yang sama digunakan di kedua pernyataan. Parameter bernama id digunakan dalam pernyataan INSERT dan pernyataan SELECT.

aws redshift-data batch-execute-statement --db-user myuser --cluster-identifier mycluster-test --database dev --sqls "INSERT INTO mytable VALUES(:id, :name, :address)" "SELECT * FROM mytable WHERE id = :id" --parameters "[{\"name\": \"id\", \"value\": \"1\"},{\"name\": \"name\", \"value\": \"Alice\"},{\"name\": \"address\", \"value\": \"Seattle\"}]"

Berikut adalah contoh respons tersebut.

{ "ClusterIdentifier": "mycluster-test", "CreatedAt": 1598306924.632, "Database": "dev", "DbUser": "myuser", "Id": "d9b6c0c9-0747-4bf4-b142-e8883122f766" }