■ はじめに
Glue から DataCatalogテーブル に対して Spark SQLを実行した際に、いくつか注意点があるので メモしておく
目次
【1】使用上の注意 1)Glue Job で Glue DataCatalog を有効にする 2)「select * from [DB].[Table] ...」ではなく「use [DB]」で指定する 【2】サンプル
【1】使用上の注意
1)Glue Job で Glue DataCatalog を有効にする 2)「select * from [DB].[Table] ...」ではなく「use [DB]」で指定する
1)Glue Job で Glue DataCatalog を有効にする
* これを設定しないと Glue Job から DataCatalog にアクセスできない * Job の ジョブパラメータに以下を入力する キー :--enable-glue-datacatalog 値:何も入れない
補足1:--enable-glue-datacatalog
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html
より抜粋 ~~~~~~~~~ --enable-glue-datacatalog — AWS Glue データカタログを Apache Spark Hive メタストアとして使用できます。 ~~~~~~~~~
補足2
* 2021/05/11現時点で、既存Jobに対して有効にしようと思ったら 更新できなかった(AWS Management Consoleのバグ?) => 仕方がないので、新規にJobを作り直した
2)「select * from [DB].[Table] ...」ではなく「use [DB]」で指定する
例えば、以下「sample_db.sample_table」のように 「select * from [DB].[Table] ...」で指定した場合、例外が発生する => 一旦、spark.sql("USE [DB]") をかませる
ダメな例
# これだと例外が発生した data_frame = spark.sql("SELECT * FROM sample_db.sample_table")
OKな例
spark.sql("USE sample_db") data_frame = spark.sql("SELECT * FROM sample_table")
【2】サンプル
import sys from awsglue.transforms import * from awsglue.utils import getResolvedOptions from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job ## Step1:初期化 args = getResolvedOptions(sys.argv, ['JOB_NAME']) job_name = args['JOB_NAME'] print(f"Start {job_name}!!") spark_context = SparkContext() glue_context = GlueContext(spark_context) spark = glue_context.spark_session job = Job(glue_context) job.init(job_name, args) ## Step2:対象DBを指定する spark.sql("use sample_db") # Step3:SQLクエリを実行する data_frame = spark.sql("SELECT * FROM sample_table") # Debug出力用 data_frame.show(n=5, truncate=False, vertical=True) data_count = data_frame.count() print(f"data_count is {data_count}") ## Step4:後処理(コミット) job.commit()
参考文献
https://qiita.com/pioho07/items/34716b2b63761100096a
公式サイト
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-glue-data-catalog-hive.html
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/aws-glue-programming-etl-glue-arguments.html
関連記事
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ 基本編 / ジョブ ~
https://dk521123.hatenablog.com/entry/2019/11/17/231505
Glue から Redshift/PostgreSQL に接続する ~ Python shell編 ~
https://dk521123.hatenablog.com/entry/2020/08/26/193237
Glue から Redshift/PostgreSQL に接続する ~ PySpark編 ~
https://dk521123.hatenablog.com/entry/2020/09/23/111741
PySpark ~ DataFrame / テーブル・項目操作編 ~
https://dk521123.hatenablog.com/entry/2020/05/18/154829