如何在PySpark中传递Catalog名称?Databricks语法错误排查
问题原因
当Catalog名称以数字开头(如100sandbox)或为纯数字(如1000)时,直接在SQL语句中使用会触发语法解析错误——SQL解析器会将这类标识符误认为数字,而非对象名称。
解决方法
在构建SQL语句时,用反引号(`)包裹Catalog名称,确保SQL解析器正确识别为标识符。修正后的代码如下:
list_catalogs = ['100sandbox', '200playground', '1000', 'sales'] df_catalogs_and_databases = None _df = None for catalog in list_catalogs: # 用反引号包裹catalog名称,避免语法解析错误 _df = spark.sql(f'SHOW DATABASES FROM `{catalog}`')\ .select( lit(catalog).alias('catalog'), col('databaseName').alias('database') ) try: df_catalogs_and_databases = df_catalogs_and_databases.union(_df) except AttributeError as e: # 处理初始时df_catalogs_and_databases为None的情况 df_catalogs_and_databases = _df except Exception as e: raise display(df_catalogs_and_databases)
补充说明
Databricks SQL遵循ANSI SQL标识符规则:
- 常规标识符(以字母开头,仅包含字母、数字、下划线)可直接使用
- 非常规标识符(以数字开头、纯数字、含特殊字符等)必须用反引号包裹,否则会触发语法解析错误
内容的提问来源于stack exchange,提问作者Julaayi
相关产品推荐
相关产品推荐

