

 Amazon Redshift tidak akan lagi mendukung pembuatan UDF Python baru mulai Patch 198. UDF Python yang ada akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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
<a name="pass-sql-statements"></a>

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

## Jalankan pernyataan SQL
<a name="data-api-calling-cli-execute-statement"></a>

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

 AWS CLI Perintah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan identifier 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"
}
```

 AWS CLI Perintah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan identifier 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"
}
```

 AWS CLI Perintah berikut menjalankan pernyataan SQL terhadap workgroup tanpa server dan mengembalikan identifier untuk mengambil hasilnya. 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"
}
```

 AWS CLI Perintah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan identifier 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
<a name="data-api-calling-cli-batch-execute-statement"></a>

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

 AWS CLI Perintah berikut menjalankan tiga pernyataan SQL terhadap cluster dan mengembalikan identifier 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"
}
```

## Jalankan pernyataan dengan parameter
<a name="data-api-calling-cli-execute-statement-parameters"></a>

Anda dapat menggunakan parameter bernama dengan kedua `execute-statement` dan `batch-execute-statement` operasi. Saat menggunakan`batch-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.

 AWS CLI Perintah berikut menjalankan pernyataan SQL terhadap cluster dan mengembalikan identifier untuk mengambil hasil. Contoh ini menggunakan metode AWS Secrets Manager otentikasi. Teks SQL memiliki parameter `distance` bernama. Dalam hal ini, jarak yang digunakan dalam predikat adalah`5`. 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 EVENT](https://docs.aws.amazon.com/redshift/latest/dg/r_eventtable.html) di Panduan *Pengembang Database Amazon Redshift*. 

Jika Anda belum memiliki `EVENT` tabel dalam database Anda, Anda dapat membuatnya menggunakan Data API 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 parameter. `starttime`
+ `venueid`Kolom adalah tipe cast ke tipe data SMALLINT.
+ 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 disisipkan:

```
 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` adalah. `1` 

```
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 sebagai 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
}
```

 AWS CLI Perintah berikut menjalankan dua pernyataan SQL dengan parameter bernama bersama terhadap cluster menggunakan`batch-execute-statement`. Teks SQL memiliki nama parameter `id` dan`name`. 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"
}
```

 AWS CLI Perintah 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"
}
```