PartiQL が DynamoDB に対応したので AWS CLI を使って DynamoDB テーブルに SQL 文を実行してみる
2020-11-24re:Invent 前の怒涛のアップデートが続く中で、 PartiQL が Amazon DynamoDB に対応したというアップデートが発表されました。これによって、 DynamoDB のテーブルに対して SQL 文を実行することができます。今回は、 AWS CLI 経由で DynamoDB のテーブルに対して SQL 文を実行してみます。
目次
概要
PartiQL が Amazon DynamoDB に対応し、DynamoDB のテーブルに対して SQL 文を実行できるようになりました。
PartiQL - A SQL-Compatible Query Language for Amazon DynamoDB - Amazon DynamoDB
PartiQL とは
PartiQL とは、 AWS がオープンソースとして公開している SQL 互換の問い合わせ言語です。CSV や JSON などのフォーマットで保存されているデータに対して、 SQL 文で操作を行うことができます。
Announcing PartiQL: One query language for all your data | AWS Open Source Blog
AWS CLI で試す
DynamoDB テーブルに対する SQL の実行は、マネジメントコンソール、 AWS SDK、 AWS CLI から行うことができます。今回は AWS CLI から SELECT 文を INSERT 文の実行を試してみます。
v2 は未対応
2020/11/24 時点で AWS CLI の v1/v2 それぞれの最新バージョンは下記のとおりです。
- v1
aws-cli-v1 $ aws --version
aws-cli/1.18.184 Python/3.8.5 Darwin/19.6.0 botocore/1.19.24
- v2
$ aws --version
aws-cli/2.1.3 Python/3.7.4 Darwin/19.6.0 exe/x86_64
DynamoDB テーブルに対して SQL 文を実行するときに使うコマンドは dynamodb execute-statement
なのですが、 上記の時点で対応しているのは v1 のみです 今日 (2020/11/25) にリリースされた 2.1.4
で v2 でも利用できるようになっています。
なので、今回は 1.18.184
で実行していきます。
execute-statement コマンド
SQL の実行に使用する execute-statement
コマンドは、次のようなパラメータを受け付けます。
$ aws dynamodb execute-statement help
...
SYNOPSIS
execute-statement
--statement <value>
[--parameters <value>]
[--consistent-read | --no-consistent-read]
[--next-token <value>]
[--cli-input-json <value>]
[--generate-cli-skeleton <value>]
--statement
オプションで SQL 文を指定する形になります。
SELECT 文
まずは SELECT 文を実行してみます。
$ aws dynamodb execute-statement \
--statement 'SELECT * FROM Thread;'
{
"Items": [
{
"LastPostedDateTime": {
"S": "2015-09-22T19:58:22.514Z"
},
"Replies": {
"N": "0"
},
"Message": {
"S": "CloudFront thread 1 message"
},
"LastPostedBy": {
"S": "User A"
},
"Answered": {
"N": "0"
},
"ForumName": {
"S": "Amazon CloudFront"
},
"Tags": {
"L": [
{
"S": "index"
},
{
"S": "primarykey"
},
{
"S": "table"
}
]
},
"Views": {
"N": "10"
},
"Subject": {
"S": "CloudFront Thread 1"
}
},
{
"LastPostedDateTime": {
"S": "2015-09-29T19:58:22.514Z"
},
"Replies": {
"N": "0"
},
"Message": {
"S": "S3 thread 1 message"
},
"LastPostedBy": {
"S": "User A"
},
"Answered": {
"N": "0"
},
"Views": {
"N": "0"
},
"ForumName": {
"S": "Amazon S3"
},
"Tags": {
"L": [
{
"S": "largeobjects"
},
{
"S": "multipart upload"
}
]
},
"Subject": {
"S": "S3 Thread 1"
}
},
{
"LastPostedDateTime": {
"S": "2015-09-22T19:58:22.514Z"
},
"Replies": {
"N": "0"
},
"Message": {
"S": "DynamoDB thread 1 message"
},
"LastPostedBy": {
"S": "User A"
},
"Answered": {
"N": "0"
},
"Views": {
"N": "0"
},
"ForumName": {
"S": "Amazon DynamoDB"
},
"Tags": {
"L": [
{
"S": "index"
},
{
"S": "primarykey"
},
{
"S": "table"
}
]
},
"Subject": {
"S": "DynamoDB Thread 1"
}
},
{
"LastPostedDateTime": {
"S": "2015-09-15T19:58:22.514Z"
},
"Replies": {
"N": "0"
},
"Message": {
"S": "DynamoDB thread 2 message"
},
"LastPostedBy": {
"S": "User A"
},
"Answered": {
"N": "0"
},
"ForumName": {
"S": "Amazon DynamoDB"
},
"Views": {
"N": "0"
},
"Tags": {
"L": [
{
"S": "items"
},
{
"S": "attributes"
},
{
"S": "throughput"
}
]
},
"Subject": {
"S": "DynamoDB Thread 2"
}
}
]
}
INSERT 文
続いて、 INSERT 文で項目を追加してみます。
$ aws dynamodb execute-statement \
--statement "SELECT * FROM Thread WHERE ForumName='DynamoDB' AND Subject='PartiQL for DynamoDB';"
{
"Items": []
}
正しく追加できたか確認してみます。
$ aws dynamodb execute-statement \
--statement "SELECT * FROM Thread WHERE ForumName='Amazon DynamoDB' AND Subject='PartiQL for DynamoDB';"
{
"Items": [
{
"Message": {
"S": "This is a sample SQL."
},
"ForumName": {
"S": "Amazon DynamoDB"
},
"Subject": {
"S": "PartiQL for DynamoDB"
}
}
]
}
まとめ
PartiQL が DynamoDB に対応したので AWS CLI を使って DynamoDB テーブルに SQL 文を実行してみた話でした。
正直、 AWS CLI から SQL 文を実行することはあまりないかと思います。むしろ、各 SDK から実行できるようになったことで、これまで取得し辛かった内容などは SQL 文を使うことで柔軟に取得できるようになるかもしれません。
comments powered by Disqus