如何在 Databricks SQL 中执行 for 或 while 循环

问题描述 投票:0回答:2

有谁知道如何在 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

如有任何建议,我们将不胜感激。

谢谢。

sql loops for-loop while-loop databricks
2个回答
1
投票

Databricks SQL 支持仅适用于基本 SQL 查询。因此,当前的 Databricks SQL 版本不支持面向过程的查询。这将属于新功能请求。

注意:Databricks SQL 为想要在数据湖上运行快速即席查询、创建多种可视化类型以从不同角度探索查询结果以及构建和共享的 SQL 用户提供了简单的体验 仪表板。 它不应取代我们当前正在处理的在 Python/PySpark 中运行的 ETL 工作负载。


0
投票

要实现这一点,只需将 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'])
© www.soinside.com 2019 - 2024. All rights reserved.