結論
現状のGlue DataCatalog L2コンストラクトはParametersをサポートしていないので、escape hatchで対応する必要がある。
Abstractions and escape hatches - AWS Cloud Development Kit (AWS CDK) v2
Glue CDKコンストラクトを取り巻く状況
以下の2つを併せ技で利用する形になる。
@aws-cdk/aws-glue-alphaは実験段階(alpha)の位置付けであるが、DataCatalogやJobなどに関わる主要なConstructsは一通り整備されており、基本的には実践利用可能と思う。
Parameters(パラメータ)を指定したくなる代表的状況と対応
Serdeの区切り文字を指定したい場合
前提として、Glue DataCatalogはマネージドなHive metastoreであり、HiveのSerde(Serializer/Deserializer)を指定して利用する形になる。
SerDe - Apache Hive - Apache Software Foundation
hive/serde/src/java/org/apache/hadoop/hive/serde2/lazy at master · apache/hive · GitHub
Serdeによって、例えば区切り文字を指定する必要があるが、これをL2コンストラクトの引数で渡せないので、以下のようにescape hatchで指定する形になる。
import { aws_glue } from 'aws-cdk-lib'; import * as glue_alpha from '@aws-cdk/aws-glue-alpha'; const hoge = new glue_alpha.Table( # 中略 dataFormat: new glue_alpha.DataFormat({ inputFormat: glue_alpha.InputFormat.TEXT, outputFormat: glue_alpha.OutputFormat.HIVE_IGNORE_KEY_TEXT, serializationLibrary: glue_alpha.SerializationLibrary.LAZY_SIMPLE, }), # 中略 }); (hoge.node.defaultChild as aws_glue.CfnTable).addPropertyOverride( 'TableInput.StorageDescriptor.SerdeInfo.Parameters', { 'serialization.format': ',', 'field.delim': ',', }, );
ここで指定している'TableInput.StorageDescriptor.SerdeInfo.Parameters'はCloudFormationの以下に該当する。
AWS::Glue::Table StorageDescriptor - AWS CloudFormation
ヘッダー行(列名が入る行)を指定したい場合
CSVなどでデータの1行目に列名が入っている場合はその点を明示しておかなければ、通常のレコードの一部として扱われてしまう。 以下のように指定する。
import { aws_glue } from 'aws-cdk-lib'; import * as glue_alpha from '@aws-cdk/aws-glue-alpha'; const hoge = new glue_alpha.Table( # 中略 dataFormat: new glue_alpha.DataFormat({ inputFormat: glue_alpha.InputFormat.TEXT, outputFormat: glue_alpha.OutputFormat.HIVE_IGNORE_KEY_TEXT, serializationLibrary: glue_alpha.SerializationLibrary.LAZY_SIMPLE, }), # 中略 }); (hoge.node.defaultChild as aws_glue.CfnTable).addPropertyOverride('TableInput.Parameters', { 'skip.header.line.count': '1', });
ここで指定している'TableInput.Parameters'はCloudFormationの以下に該当する。