2

問題の説明/根本原因: AWS Glue を使用して、本番 PostGress DB から AWS DataLake にデータをロードしています。Glue は内部的に Spark ジョブを使用してデータを移動します。ただし、Spark は小文字のテーブル列名しかサポートしていないため、ETL プロセスは失敗しています。残念ながら、ソースの PostGress テーブル列名はすべてキャメルケースで二重引用符で囲まれています。

例: PostGress DB のソース テーブルの列名は「CreatedDate」です。Spark ジョブ クエリは createddate を探していますが、列名が見つからないため失敗しています。そのため、Spark ジョブ クエリは、PostGress DB からデータを移動できるように、正確に「CreatedDate」を探す必要があります。これは、Spark (小文字のテーブル列名のみをサポートするため) と PostGress (二重引用符で作成された列名は、残りの期間は二重引用符で囲む必要があるため) の両方に固有の制限のようです。

参照リンク: https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html PostgreSQL の列名は大文字と小文字を区別しますか?

評価されたソリューション: 1. すべての下流システムでより大きな変更が必要になるため、列名をキャメルケースから小文字に変更することはできません。2. Glue の自動生成された Spark コードを書き直し/微調整して、二重引用符で囲まれた小文字以外のソース テーブルの列名で動作するかどうかを確認しようとしています。

以前にこの問題に遭遇した人はいますか? また、自動生成された Spark コードを調整して機能させようとしたことはありますか?

4

2 に答える 2

0

解決策 1: scala を使用して動的フレームを接着している場合は、applyMapping(). のデフォルト値caseSensitiveは true です。https://docs.aws.amazon.com/glue/latest/dg/glue-etl-scala-apis-glue-dynamicframe-class.html#glue-etl-scala-apis-glue-dynamicframe-class-defs を確認してください-applyMapping

解決策 2: Python で pyspark データフレームを使用している場合は、conf を設定できます。

spark_session.sql('set spark.sql.caseSensitive=true')
于 2019-09-25T14:50:15.970 に答える