有谁知道如何在 Databricks 中的 SQL 中编写 for 或 while 循环?我已经尝试了以下 SQL Server 类型代码的许多变体,但似乎没有任何效果。我似乎也找不到任何参考资料。我不想在 PySpark 中执行此操作,因为我需要将输出输入到更多 SQL 代码中。
DECLARE @Counter INT
SET @Counter=1
WHILE ( @Counter <= 10)
BEGIN
PRINT 'The counter value is = ' + @Counter
SET @Counter = @Counter + 1
END
如有任何建议,我们将不胜感激。
谢谢。
Databricks SQL 支持仅适用于基本 SQL 查询。因此,当前的 Databricks SQL 版本不支持面向过程的查询。这将属于新功能请求。
注意:Databricks SQL 为想要在数据湖上运行快速即席查询、创建多种可视化类型以从不同角度探索查询结果以及构建和共享的 SQL 用户提供了简单的体验 仪表板。 它不应取代我们当前正在处理的在 Python/PySpark 中运行的 ETL 工作负载。
要实现这一点,只需将 SQL 中的所有表获取到数据帧中,然后使用收集将每个表获取到数据帧中:
# import necessary libraries
import os
from pyspark.sql.functions import udf, col
from pyspark.sql.types import IntegerType
# get list of tables from SQL, for MySQL syntax you can use just SHOW TABLES
df_tables = spark.read.jdbc(url=os.environ['SQL_JDBC_URL'], table="""(SELECT
*
FROM
SYSOBJECTS
WHERE
xtype = 'U') x""")
# register function
def create_df(table):
globals()[table] = spark.read.jdbc(url=os.environ['SQL_JDBC_URL'], table=table)
return globals()[table].count()
# for each name from table list create dataframe using function
for value in df_tables.select("name").collect():
create_df(value['name'])