{QLDB}Amazon QLDB へのアクセス


-- 1. 台帳の作成
aws qldb create-ledger \
--name qldb01 \
--permissions-mode STANDARD \
--no-deletion-protection


-- 2. 台帳一覧
aws qldb list-ledgers

aws qldb describe-ledger --name qldb01

-- 3. QLDB シェルを使用した Amazon QLDB へのアクセス

クライアントEC2(Amazon Linux2)にPython3.8をインストール

amazon-linux-extras list | grep python
sudo amazon-linux-extras install -y python3.8
python3.8 -V

sudo pip3.8 install qldbshell

qldbshell --ledger qldb01

create table testtable
insert into testtable `{"name": "john doe"}`
select * from testtable
drop table testtable
exit

 

-- 4. 台帳にテーブル、インデックス、テストデータを作成
qldbshell --ledger qldb01

create table tab1
create table tab2
create table tab3

create index on tab1 (vin)
create index on tab3 (vin)


insert into tab1
<<
{ 'vin' : '11111'},
{ 'vin' : '22222'},
{ 'vin' : '33333'}
>>


insert into tab2
<<
{ 'name' : 'alice'},
{ 'name' : 'bob'},
{ 'name' : 'carol'}
>>


insert into tab3
<<
{
'vin' : '11111',
'city' : '',
'owners' : {
'primaryowner' : { 'personid': '' },
'secondaryowners' :
}
},
{
'vin' : '22222',
'city' : '',
'owners' : {
'primaryowner' : { 'personid': '' },
'secondaryowners' :

}
},
{
'vin' : '33333',
'city' : '',
'owners' : {
'primaryowner' : { 'personid': '' },
'secondaryowners' : []
}
}
>>


-- 5. 台帳のテーブルのクエリー

select * from tab1 as v
where v.vin = '11111'

select v.vin, r.city, r.owners, r.vin
from tab1 as v, tab3 as r
where v.vin = '11111'
and v.vin = r.vin


-- 6. 台帳内の文書の変更

-- aliceのpersonid取得

select metadata.id from _ql_committed_tab2 as p
where p.data.name = 'alice'

-- ownerとcityの更新(1回目)

select r.owners.primaryowner, r.city
from tab3 as r
where r.vin = '11111'

update tab3 as r
set r.owners.primaryowner.personid = '3Ax1tFYi2iuC7bebbQBlaM', --replace with your id
r.city = 'tokyo'
where r.vin = '11111'

select r.owners.primaryowner, r.city
from tab3 as r
where r.vin = '11111'


-- bobのpersonid取得
select metadata.id from _ql_committed_tab2 as p
where p.data.name = 'bob'


-- ownerとcityの更新(2回目)
select r.owners.primaryowner, r.city
from tab3 as r
where r.vin = '11111'

update tab3 as r
set r.owners.primaryowner.personid = '0FyC9IJqNE675cdxoFxL2r', --replace with your id
r.city = 'yokohama'
where r.vin = '11111'

select r.owners.primaryowner, r.city
from tab3 as r
where r.vin = '11111'


-- 7. ドキュメントのリビジョン履歴を表示する

select r_id from tab3 as r by r_id
where r.vin = '11111'


select h.data.vin, h.data.city, h.data.owners
from history(tab3) as h
where h.metadata.id = '90uhNA2RiSfCmKkJwki9TW' --replace with your id

select value h.metadata
from history(tab3) as h
where h.metadata.id = '90uhNA2RiSfCmKkJwki9TW' --replace with your id


-- 8. 台帳内の文書の検証

-- ダイジェストの取得

aws qldb get-digest --name qldb01

 

-- リビジョンの取得

select r.metadata.id, r.blockAddress
from _ql_committed_tab3 as r
where r.data.vin = '11111'


aws qldb get-revision \
--name qldb01 \
--block-address 'IonText="{strandId:\"Ie5RoXlbY005zZWLfrXHAR\",sequenceNo:23}"' \
--document-id 90uhNA2RiSfCmKkJwki9TW \
--digest-tip-address 'IonText="{strandId:\"Ie5RoXlbY005zZWLfrXHAR\",sequenceNo:27}"'


-- ブロックの取得

aws qldb get-block \
--name qldb01 \
--block-address 'IonText="{strandId:\"Ie5RoXlbY005zZWLfrXHAR\",sequenceNo:23}"' \
--digest-tip-address 'IonText="{strandId:\"Ie5RoXlbY005zZWLfrXHAR\",sequenceNo:27}"'

 

-- 9. 台帳の削除

aws qldb delete-ledger --name qldb01