【问题标题】:Hive permissions on view not inherited in Spark未在 Spark 中继承的视图的 Hive 权限
【发布时间】:2021-10-08 15:41:27
【问题描述】:

我在 Hive 中创建了镶木地板桌 test_table。其中一个分区的位置是'/user/hive/warehouse/prod.db/test_table/date_id=20210701'

基于此表创建视图:

create view prod.test_table_vw as
select date_id, src, telephone_number, action_date, duration from prod.test_table

然后授予某些角色选择权限:

GRANT SELECT ON TABLE prod.test_table_vw TO ROLE data_analytics;

然后具有此角色的用户尝试使用来自 pyspark 的 spark.sql() 查询此数据:

sql = spark.sql(f"""SELECT DISTINCT phone_number
            FROM prod.test_table_vw
            WHERE date_id=20210701""")
sql.show(5)

此代码返回权限被拒绝错误:

Py4JJavaError: An error occurred while calling o138.collectToPython.
: org.apache.hadoop.security.AccessControlException: Permission denied: user=keytabuser, access=READ_EXECUTE, inode="/user/hive/warehouse/prod.db/test_table/date_id=20210701":hive:hive:drwxrwx--x

由于其中包含一些敏感字段,我无法授予此表的选择权限,这就是我创建列列表有限的视图的原因。

问题:

为什么 Spark 会忽略 Hive 的视图选择权限?以及如何解决这个问题?

【问题讨论】:

标签: apache-spark hive apache-spark-sql


【解决方案1】:

这是 Spark 的限制:

当 Spark 作业访问 Hive 视图时,Spark 必须具有以下权限: 读取底层 Hive 表中的数据文件。目前,星火 不能使用基于列或 WHERE 的细粒度权限 视图定义中的子句。如果 Spark 没有所需的 对底层数据文件的权限,针对 view 返回一个空的结果集,而不是错误。

参考link

【讨论】:

    猜你喜欢
    • 2019-01-28
    • 1970-01-01
    • 2022-09-23
    • 2014-02-15
    • 2021-09-13
    • 2014-09-21
    • 2015-06-17
    • 2012-09-03
    • 1970-01-01
    相关资源
    最近更新 更多