从aws粘合作业中引用配置单元视图

d8tt03nd  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(243)

我试图弄清楚如何将一个用例从emr迁移到涉及hive视图的aws glue。
在今天的emr中,我在s3中有一个由parquet支持的hive外部表,我还有其他视图,如 create view hive_view as select col from external_table where col = x 然后在电子病历上的spark,我可以发表如下声明 df = spark.sql("select * from hive_view") 引用我的配置单元视图。
我知道我可以使用glue目录作为hivemetastore的替代品,但是我正在尝试将spark作业本身从emr迁移到glue。所以在我的最终状态下,不再有Hive端点,只有胶水。
问题:
我该如何更换 create view ... 语句,如果我不再有一个emr集群来发出配置单元命令?等价的aws glue sdk调用是什么?
如何从粘合作业中引用这些视图?
到目前为止我尝试的是:使用 boto3 打电话 glue.create_table 这样地

glue = boto3.client('glue')
glue.create_table(DatabaseName='glue_db_name', 
   TableInput = {'Name': 'hive_view', 
       'TableType': 'VIRTUAL_VIEW',
       'ViewExpandedText': 'select .... from ...'
    })

我可以看到在glue目录中创建的对象,但分类显示为“未知”,作业中的引用失败并出现相应的错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o56.getCatalogSource. : 
java.lang.Error: No classification or connection in bill_glue_poc.view_test at ...

我已经验证了我可以在emr中使用带有spark的hive视图,并将glue catalog作为metastore——我在glue catalog中看到视图,spark sql查询成功,但是我无法从glue job中引用视图。

ntjbwcob

ntjbwcob1#

您可以在spark中创建临时视图,并像配置单元表(scala)一样进行查询:

val dataDyf = glueContext.getSourceWithFormat(
      connectionType = "s3",
      format = "parquet",
      options = JsonOptions(Map(
        "paths" -> Array("s3://bucket/external/folder")
      ))).getDynamicFrame()

// Convert DynamicFrame to Spark's DataFrame and apply filtering
val dataViewDf = dataDyf.toDF().where(...)

dataViewDf.createOrReplaceTempView("hive_view")

val df = spark.sql("select * from hive_view")

相关问题