Amazon AthenaアクションでのAthenaの各データ型の値の扱い
ベースマキナにはアクションの実行結果に対してJavaScriptで処理を書く機能があります。
各アクションの実行結果の値は、それに対応するJavaScriptの型へと自動的に変換されます。 以下の表は、上記の機能でAmazon Athenaアクションの結果として使用される、Amazon Athenaのデータ型と、対応するJavaScriptの型の一覧です。
Amazon Athenaのデータ型 | アクションの実行結果でのJavaScriptの型 | 対応状況 |
---|---|---|
VARCHAR | string | null | 対応 |
CHAR | string | null | 対応 |
UUID | string | null | 対応 |
IPADDRESS | string | null | 対応 |
DATE | string | null | 対応 |
TIME | string | null | 対応 |
TIME WITH TIME ZONE | string | null | 対応 |
TIMESTAMP | string | null | 対応 |
TIMESTAMP WITH TIME ZONE | string | null | 対応 |
ARRAY | string | null | 対応 |
ROW | string | null | 対応 |
MAP | string | null | 対応 |
DOUBLE | number | null | 対応 |
INTEGER | number | null | 対応 |
FLOAT | number | null | 対応 |
TINYINT | number | null | 対応 |
SMALLINT | number | null | 対応 |
BOOLEAN | boolean | null | 対応 |
BIGINT | bigint | null | 対応 |
JSON (JSON型の値をパースするが有効) | Record<string, unknown> | unknown[] | string | number | boolean | null | 対応 |
JSON (JSON型の値をパースするが無効) | string | null | 対応 |
DECIMAL | string | null | 未対応 |
VARBINARY | string | null | 未対応 |
INTERVAL YEAR TO MONTH | string | null | 未対応 |
INTERVAL DAY TO SECOND | string | null | 未対応 |
各データ型の詳細はAWSのドキュメントのAmazon Athenaのデータ型 (opens in a new tab)をご参照ください。
未対応のデータ型
対応状況が未対応のデータ型はJavaScriptの型への変換が未対応で、現在はstring | null
に変換されますが、今後別のJavaScriptの型に変更される可能性があります。
なおAmazon Athenaアクションの実行結果に未対応のデータ型の列の値が含まれる場合、アクションの実行結果に以下のメッセージが表示されます。
各データ型の列の値を別のJavaScriptの型に変換する
以下は各データ型の列の値を、別のJavaScriptの型として扱いたい場合の変換方法です。
SQL文でデータ型を変換する
アクションの実行で共通の変換をする場合は、SQL文内でCAST
関数を使ってデータ型を変換する方法が便利です。
例えば、以下のようにVARCHAR
型の列の値をINTEGER
型に変換すると、
アクションの実行結果のJavaScriptの型はnumber | null
になります。
SELECT
-- ここでVARCHAR型の列「id」の値をINTEGER型に変換
CAST(id AS INTEGER)
FROM
users;
CAST
関数の詳細はTrino(Amazon Athenaのエンジン)のドキュメントのConversion functions (opens in a new tab)をご参照ください。
JavaScriptで値の型を変換する
各アクション実行ごとに別の変換をしたい場合は、JavaScriptのコード内で値の型を変換できます。
以下は、アクションの実行結果の加工スクリプトでstring | null
型の値をnumber
型に変換する例です。
return [
{
success: results[0].success.map((user) => ({
// `Number()`コンストラクターで`string | null`型の値を`number | null`型に変換
id: user.id !== null ? Number(user.id) : null,
name: user.name,
})),
},
];
JSON型の列の値をJavaScriptの配列やオブジェクトに変換する
アクションの設定で「JSON型の値をパースする」を有効にすると、JSON型の列の値がJavaScriptのオブジェクトや配列などに変換されます。
例えば'{"name": "John", "age": 30}'
という値は{name: "John", age: 30}
というオブジェクトに変換されます。
ARRAY
,ROW
,MAP
型の列の値をJavaScriptの配列やオブジェクトに変換する
通常、ARRAY
,ROW
,MAP
型の列の値はstring | null
に変換されますが、以下の手順でJavaScriptの配列やオブジェクトに変換できます。
- 「JSON型の値をパースする」を有効にする
CAST
関数でARRAY
,ROW
,MAP
型の列の値をJSON
型に変換する
SELECT
-- MAP型の列「login_user」の値をJSON型に変換
CAST(login_user AS JSON)
FROM
audit_logs;