アクション
データソース別の設定
Amazon Athena
各データ型の値の扱い

Amazon AthenaアクションでのAthenaの各データ型の値の扱い

ベースマキナにはアクションの実行結果に対してJavaScriptで処理を書く機能があります。

各アクションの実行結果の値は、それに対応するJavaScriptの型へと自動的に変換されます。 以下の表は、上記の機能でAmazon Athenaアクションの結果として使用される、Amazon Athenaのデータ型と、対応するJavaScriptの型の一覧です。

Amazon Athenaのデータ型アクションの実行結果でのJavaScriptの型対応状況
VARCHARstring | null対応
CHARstring | null対応
UUIDstring | null対応
IPADDRESSstring | null対応
DATEstring | null対応
TIMEstring | null対応
TIME WITH TIME ZONEstring | null対応
TIMESTAMPstring | null対応
TIMESTAMP WITH TIME ZONEstring | null対応
ARRAYstring | null対応
ROWstring | null対応
MAPstring | null対応
DOUBLEnumber | null対応
INTEGERnumber | null対応
FLOATnumber | null対応
TINYINTnumber | null対応
SMALLINTnumber | null対応
BOOLEANboolean | null対応
BIGINTbigint | null対応
JSON(JSON型の値をパースするが有効)Record<string, unknown> | unknown[] | string | number | boolean | null対応
JSON(JSON型の値をパースするが無効)string | null対応
DECIMALstring | null未対応
VARBINARYstring | null未対応
INTERVAL YEAR TO MONTHstring | null未対応
INTERVAL DAY TO SECONDstring | 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の配列やオブジェクトに変換できます。

  1. 「JSON型の値をパースする」を有効にする
  2. CAST関数でARRAY,ROW,MAP型の列の値をJSON型に変換する
SELECT
    -- MAP型の列「login_user」の値をJSON型に変換
    CAST(login_user AS JSON)
FROM
    audit_logs;