{Athena}使用開始方法


https://dev.classmethod.jp/articles/amazon-athena-run-query-using-awscli/

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/getting-started.html

https://qiita.com/yoshiyama_hana/items/9b2f26b214de92a0f36c

https://aws.amazon.com/jp/premiumsupport/knowledge-center/athena-empty-results/


※S3バケットのパスはデータファイルではなく、データファイルのあるディレクトリを指定する
データファイルを指定した場合、selectでゼロ個のレコードが返される

例えば、テーブルの場所が次のようになっている場合、Athena クエリはゼロ個のレコードを返します。

s3://doc-example-bucket/table1.csv
s3://doc-example-bucket/table2.csv


-- 1. コマンド等のインストール

-- 1.1 aws cli version 2 インストール

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version

-- 1.2 jqインストール
sudo yum -y install jq


-- 2. S3 バケットを作成する

aws s3 ls

aws s3 mb s3://bucket123

 

-- 3. S3にテストデータアップロード

vim tab1_0001.txt
1,10,AAA
2,20,BBB
3,30,CCC

vim tab1_0002.txt
4,40,DDD
5,50,EEE
6,60,FFF


aws s3 cp tab1_0001.txt s3://bucket123/tab1/tab1_0001.txt
aws s3 cp tab1_0002.txt s3://bucket123/tab1/tab1_0002.txt


aws s3 ls s3://bucket123 --recursive

 


-- 4. クエリの結果の場所の設定


aws athena list-work-groups

aws athena get-work-group \
--work-group primary


aws athena update-work-group \
--work-group primary \
--configuration-updates '{
  "EnforceWorkGroupConfiguration": false,
  "ResultConfigurationUpdates": {
    "OutputLocation": "s3://bucket123/result"
  },
  "PublishCloudWatchMetricsEnabled": false,
  "RequesterPaysEnabled": false,
  "EngineVersion": {
    "SelectedEngineVersion": "AUTO",
    "EffectiveEngineVersion": "Athena engine version 2"
  }
}'

 


-- 5. データベースを作成する

aws glue create-database \
--database-input '{"Name": "test"}'

aws glue get-databases

aws glue get-database \
--name test

 


-- 6. テーブルを作成する


aws glue create-table \
--database-name test \
--table-input '{
    "Name": "tab1",
    "StorageDescriptor": {
        "Columns": [
            {
                "Name": "col1",
                "Type": "int"
            },
            {
                "Name": "col2",
                "Type": "int"
            },
            {
                "Name": "col3",
                "Type": "string"
            }
        ],
        "Location": "s3://bucket123/tab1",
        "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
        "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
        "SerdeInfo": {
            "SerializationLibrary": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
            "Parameters": {
                "field.delim": ",",
                "line.delim": "\n",
                "serialization.format": ","
            }
        }
    },
    "PartitionKeys": [],
    "TableType": "EXTERNAL_TABLE"
}' 

 


aws glue get-tables \
--database-name test

aws glue get-table \
--database-name test \
--name tab1

 

 

-- 7. データをクエリする


aws athena start-query-execution \
--query-string "SELECT * FROM test.tab1;" \
--result-configuration OutputLocation=s3://bucket123/output

aws athena get-query-execution \
--query-execution-id 66666666-7777-8888-9999-aaaaaaaaaaaa

aws athena get-query-results \
--query-execution-id 66666666-7777-8888-9999-aaaaaaaaaaaa


aws s3 ls s3://bucket123 --recursive

 

-- 8. クエリを保存する

aws athena list-named-queries

 

aws athena create-named-query \
--name query01 \
--database test \
--query-string "SELECT * FROM test.tab1;"

aws athena get-named-query \
--named-query-id 11111111-2222-3333-4444-555555555555


aws athena delete-named-query \
--named-query-id 11111111-2222-3333-4444-555555555555

 

 

 

-- 9. クリーンアップ

-- テーブルの削除

aws glue get-tables \
--database-name test

aws glue get-table \
--database-name test \
--name tab1

 

aws glue delete-table \
--database-name test \
--name tab1

-- データベースの削除

aws glue get-databases

aws glue get-database \
--name test

aws glue delete-database \
--name test

aws glue get-database \
--name default

aws glue delete-database \
--name default

 


-- バケットの削除

aws s3 ls

aws s3 rb s3://bucket123 --force