Databricks: 如何在 %SQL 查询中获取当前用户

3
在DATABRICKS DELTA数据库中,我有关于不同用户组的信息,这些信息保存在同一张表中,因为用户组是动态变化的。我的意思是所有组中的所有用户都使用同一张表。
用户通过一个单一视图来访问数据。
我希望根据访问该视图的用户对数据进行过滤。你知道如何做吗?以下是一个示例(any_object将是检索当前使用视图的用户或其所属的用户组值的命令):
%sql
CREATE VIEW db.table AS SELECT * FROM WHERE column1 = any_object.username OR any_object.groupname 

你能做这个吗?

谢谢!

2个回答

2

最新消息,Databricks刚刚发布了Spark SQL current_user()函数。

测试方法如下:

%sql
set spark.databricks.userInfoFunctions.enabled = true;
select current_user()

您可以在集群的Spark选项或会话中设置spark.databricks.userInfoFunctions.enabled。我使用了最新的工作区版本(v3.29),DBR 7.3和高并发集群进行测试。

1
短答案是,你不能。[截至Spark 3.0/Spark 2.4.5]
Spark没有安全的current_user()方法。
长一点的答案是,这里有一个我用于一些ETL代码的hack。我没有在你要寻找的多用户场景中进行测试。
%scala
val key = "spark.databricks.username"
val value = dbutils.notebook.getContext.tags("user")
spark.conf.set(key, value)

print(spark.conf.get(key))

val confBd = sc.broadcast(spark.conf.getAll.toMap)
/*
  @return Current username
*/
val current_userx = () => {
  confBd.value.get("spark.databricks.username")
}
spark.udf.register("current_user", current_userx)

%sql
select current_user()

能否将这个值存储在一个变量中,以便稍后在同一SQL脚本中使用,例如在INSERT语句中? - Rod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接