【AWS】AWS Glue ~ クローリング結果の確認画面 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/12/01/003455

で行ったクローラでの動作後に
AWS Glue で [Databases]-[Tables] に遷移して
クローリング結果を確認する際に表示項目などに不明点があった。

そこで、今回は、そのページおよびその派生した技術知識について
メモしておく。

目次

【1】表示項目
 1)Deprecated (廃止)について
 2)Hive Serde について
【2】ボタン操作
 1)Edit table (テーブルの編集)
 2)Delete table (テーブルの削除)
 3)Partitions and indices (パーティションとインデックス)
 4)View properties (プロパティの表示)
 5)Compare versions (バージョンの比較)
 6)Edit schema (スキーマの編集)

【1】表示項目

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/console-tables.html#console-tables-details
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-api-catalog-tables.html

に一部は載っているが、
AWS Glue で [Databases]-[Tables] に遷移した際に
一部よくわからない項目もあるのでメモ。

[01] Name (名前)
[02] Description (説明)
[03] Database (データベース)
[04] Classification (分類)
[05] Location (場所)
[06] Connection (接続)
[07] Deprecated (廃止)
[08] Last updated (最終更新日)
[09] Input format (入力形式)
[10] Output format (出力形式)
[11] Serde serialization lib (シリアル化ライブラリ)
[12] Serde parameters (Serde パラメータ)
[13] Table properties (テーブルのプロパティ)
[14] Schema (スキーマ)

[01] Name (名前)

*  テーブル名

[02] Description (説明)

* 説明文(コメント文)

[03] Database (データベース)

* テーブルがあるデータベース名

[04] Classification (分類)

* テーブルの作成時に指定された分類
* e.g 'Unknown', 'csv', 'parquet', etc

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/console-tables.html

[05] Location (場所)

* 格納場所
* e.g. 's3://xxxx-xxx/xxxx'

[06] Connection (接続)

* データストアへの接続が必要な場合、接続名

[07] Deprecated (廃止)

* クローリングした結果、Deprecated マークされたかどうか
* e.g. 'Yes' or 'No'
 => 詳細は、下記「1)Deprecated (廃止)について」を参照

[08] Last updated (最終更新日)

* テーブルの最終更新日

[09] Input format (入力形式)

* SerDe ライブラリの InputFormatクラス
* e.g. 'org.apache.hadoop.mapred.TextInputFormat'

 => どうも SerDe ライブラリ内部で読み込みに
  使用しているクラス名っぽい、、、
 => 詳細は、下記「2)Hive Serde について」を参照

[10] Output format (出力形式)

* SerDe ライブラリの OutputFormatクラス
* e.g. 'org.apache.hadoop.ql.io.HiveIgnoreKeyTextOutputFormat'

 => どうも SerDe ライブラリ内部で書き込みに
  使用しているクラス名っぽい、、、
 => 詳細は、下記「2)Hive Serde について」を参照

[11] Serde serialization lib (シリアル化ライブラリ)

* テーブル行の読み書きに使用している SerDe ライブラリのクラス。
* e.g. 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
 => 詳細は、下記「2)Hive Serde について」を参照

[12] Serde parameters (Serde パラメータ)

*  SerDe ライブラリで使用しているパラメータ
* e.g. 「"file.delim" : ","」「"serialization.format" : ","」

 => 「[11] Serde serialization lib (シリアル化ライブラリ)」によって
  キー/値が変わるっぽい。
 => 詳細は、下記「2)Hive Serde について」を参照

[13] Table properties (テーブルのプロパティ)

* テーブルのメタ情報
* e.g. 「"totalSize" : "12345"」「"numRows" : "2345"」

 => 「[11] Serde serialization lib (シリアル化ライブラリ)」の
  出力結果っぽく、結果も変わる
 => 詳細は、下記「2)Hive Serde について」を参照

[14] Schema (スキーマ)

* テーブルの定義
 => 項目名/データ型/パーティションキー/コメント

1)Deprecated (廃止)について

そもそも、これなんだ?

 クローラの設定オプションにおいて、
「How should AWS Glue handle deleted objects in the data store?
(テーブルのデータストアからオブジェクトが削除された場合にどうするか?)」で
「Mark the table as deprecated in the data catalog
(そのテーブルを廃止(deprecated)としてマークする)」
を選択した場合に表示される

Deprecated を手動で削除するには?

[1] AWS Glueの [Databases]-[Tables]を選択
 => 一覧の項目「Deprecated」が「Yes」かどうかで確認できる

[2] deprecated になっている対象テーブルをクリック
 => 「Table properties」の
  プロパティ「DEPRECATED_BY_CRAWLER : XXXXXXXX... (数字)」
  が確認できるはず。

[3] [Edit table]を選択し、該当する
 プロパティ「DEPRECATED_BY_CRAWLER : XXXXXXXX...」を
 ×ボタンで削除する

2)Hive Serde について

https://cwiki.apache.org/confluence/display/Hive/DeveloperGuide#DeveloperGuide-HiveSerDe

より抜粋
~~~~~~~~~~~~~~~~
What is a SerDe?

* SerDe is a short name for "Serializer and Deserializer."
* Hive uses SerDe (and FileFormat) to read and write table rows.

* HDFS files --> InputFileFormat --> <key, value> --> Deserializer --> Row object
* Row object --> Serializer --> <key, value> --> OutputFileFormat --> HDFS files
~~~~~~~~~~~~~~~~

【意訳】

SerDe って何?

* SerDeは、SERialization(シリアライズ) と
 DEserialization(デシリアライズ)を略したもの。
* Hiveは、SerDe(およびファイルフォーマット)を
 テーブル行の読み書きに使用。

* HDFS --> 入力形式 --> <キー, 値> --> デシリアライズ --> 行オブジェクト
* 行オブジェクト --> シリアライズ --> <キー, 値> --> 出力形式 --> HDFS

 => 「入力形式」が「[09] Input format (入力形式)」
 => 「出力形式」が「[10] Output format (出力形式)」
   になっているっぽい

AWS公式サイト
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/serde-reference.html

例:「Serde serialization lib:LazySimpleSerDe」

* CSV/TSV/カスタム区切り文字を扱うライブラリ
 => どうも、このライブラリの出力結果が
  「[13] Table properties (テーブルのプロパティ)」になるっぽい動き、、、

https://docs.aws.amazon.com/ja_jp/athena/latest/ug/lazy-simple-serde.html

【2】ボタン操作

1)Edit table (テーブルの編集)
2)Delete table (テーブルの削除)
3)Partitions and indices (パーティションとインデックス)
4)View properties (プロパティの表示)
5)Compare versions (バージョンの比較)
6)Edit schema (スキーマの編集)

1)Edit table (テーブルの編集)

* テーブルを手動で修正

2)Delete table (テーブルの削除)

* テーブルの削除

3)Partitions and indices (パーティションとインデックス)

* パーティションが存在する場合に表示
(パーティション未使用テーブルで非表示)
* パーティションを追加する

4)View properties (プロパティの表示)

* 表示されているテーブル情報(メタ情報)をJSON形式で表示
* パーティションが存在する場合、パーティションが一覧表示され
 各パーティションを選択すると、メタ情報を表示する

サンプル

{
  "StorageDescriptor": {
    "cols": {
      "FieldSchema": [
         {
           "name": "id",
           "type": "string",
           "comment": ""
         },
         ....
      ]
    },
    "Location": "s3://<bucket-name>/xxxx",
    "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": ",",
            "serialization.format": ","
        }
    }
  },
  "Parameters": {
    "skip.header.line.count": "1",
    "EXTERNAL": "TRUE",
    "has_encrypted_data": "false",
    "serialization.encoding": "utf-8"
  }
}

5)Compare versions

* テーブルが更新された場合、前Versionと比較表示する

6)Edit schema

* テーブル定義を手動で修正

参考文献

https://qiita.com/pioho07/items/45b5b6412141e73c552d
https://qiita.com/pioho07/items/4a5ed0be404eea166c24
https://dev.classmethod.jp/articles/glue-crawler-athena-tutorial/

関連記事

AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ 基本編 / クローラ ~
https://dk521123.hatenablog.com/entry/2019/12/01/003455
AWS Glue ~ Boto3 / パーティション操作編 ~
https://dk521123.hatenablog.com/entry/2021/06/09/113458
Glue から DataCatalogテーブル に対して Spark SQLを実行する
https://dk521123.hatenablog.com/entry/2021/05/11/220731
Glue Job から パーティションを更新することを考える
https://dk521123.hatenablog.com/entry/2021/05/15/130604