web-dev-qa-db-ja.com

AWS Glue:クローラーがタイムスタンプを文字列として誤って解釈します。文字列をタイムスタンプに変換することを意図したGLUE ETLはそれらをNULLにします

私はAWS Glueをいじって、チュートリアル here

アテナでクローラーを正常に作成してデータを検出することができましたが、クローラーによって作成されたデータ型に問題がありました。 dateおよびtimestampデータ型は、stringデータ型として読み取られます。

私はこれに続いて、入力としてクローラーによって作成されたデータソースとAmazon S3のターゲットテーブルを使用して、GLUEでETLジョブを作成しました

マッピング変換の一部として、日付とタイムスタンプのデータ型をstringからtimestampに変換しましたが、残念ながらETLはこれらの列型をNULLSに変換しました。 GROK式で分類子を使用することを検討しましたが、GLUEのETLの一部として変換することにしました。

タイムスタンプの形式は1/08/2010 6:15:00 PM

5
Balajee Addanki

あなたが使用しているタイムスタンプの形式がわからないので、その形式は次のように想定しました。

2018-05-30T12:22:07.000Z

この場合、次のようにテーブル定義でserdeパラメータを設定できます。

'timestamp.formats'='yyyy-MM-dd\'T\'HH:mm:ss.SSSZ'
2
j.b.gorski

以下は、タイムスタンプデータの組み込み分類子です。ご覧のように、あなたが持っているデータはそれらのどれとも一致しません。カスタム分類子を作成し、それを新しいクローラーに追加する必要があります(既存のクローラーの更新は機能しません)

 TIMESTAMP_ISO8601 %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?

 TZ (?:[PMCE][SD]T|UTC)

 DATESTAMP_RFC822 %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ}

 DATESTAMP_RFC2822 %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE}

 DATESTAMP_OTHER %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR}

 DATESTAMP_EVENTLOG %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND}

 CISCOTIMESTAMP %{MONTH} %{MONTHDAY} %{TIME}
2
Tanveer Uddin