从EMRpySpark访问athena视图,重新创建外部表或胶水目录,这是最有效的方法

mf98qq94  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(322)

我读了其他问题,我对这个选项感到困惑。我想读一本书 Athena view 在emr spark中,通过在google/stackoverflow上搜索,我意识到这些视图以某种方式存储在s3中,因此我首先尝试通过

Describe mydb.Myview

它提供模式,但不提供外部位置。我假设我不能从 S3 到目前为止,我在阅读《星火》中雅典娜的观点时考虑了什么
我考虑过以下选择
使用with STANTATION和external format as从这个雅典娜视图中创建一个新表
PARQUET CREATE TABLE Temporary_tbl_from_view WITH ( format = 'PARQUET', external_location = 's3://my-bucket/views_to_parquet/', ) AS ( SELECT * FROM "mydb"."myview"; ); 另一种选择是基于这个答案,这表明
当您启动emr集群(v5.8.0及更高版本)时,您可以指示它连接到您的glue数据目录。这是“创建群集”对话框中的复选框。当您选中此选项时,您的sparksqlcontext将连接到glue数据目录,并且您将能够看到athena中的表。
但我不知道我该怎么问这个问题 view (非表格)如果雅典娜表格/视图可通过 Glue catalogue 在spark上下文中,像这样的简单语句有效吗?

sqlContext.sql("SELECT * from mydbmyview")

问题是,在spark中读取此视图更有效的方法是什么?使用with语句(外部位置)重新创建表是否意味着将此内容存储在 Glue catalog 或者 S3 两次?如果是,我如何通过s3或胶水目录直接阅读?

l2osamch

l2osamch1#

为了与其他人共享我遵循的解决方案,我创建了启用了以下选项的集群

Use AWS Glue Data Catalog for table metadata

后来,我看到 database 来自aws glue的名称,并且能够在中看到所需的视图 tablename 如下所示

spark.sql("use my_db_name")
spark.sql("show tables").show(truncate=False)
+------------+---------------------------+-----------+
|database    |tableName                  |isTemporary|
+------------+---------------------------+-----------+
|  my_db_name|tabel1                     |false      |
|  my_db_name|desired_table              |false      |
|  my_db_name|tabel3                     |false      |
+------------+---------------------------+-----------+

相关问题