python - 远大的期望 SQLAlchemy 不包含小写的列名
问题描述
我正在尝试使用 SQLAlchemy 和 Great Expectations 来测试存储在 Snowflake DB 中的数据集的数据质量。数据集被调用candidates
,感兴趣的列被调用first_name
。
但是,当我跑步时
sql_dataset = great_expectations.dataset.SqlAlchemyDataset(table_name="candidates", engine=engine, schema=creds["schema"])
sql_dataset.expect_column_values_to_be_in_set("first_name", ['Gather', 'Male'])
我正进入(状态:
ProgrammingError: (snowflake.connector.errors.ProgrammingError) 002003 (42S02): SQL compilation error:
Object 'KEBOOLA_274.WORKSPACE_48777448.CANDIDATES' does not exist or not authorized.
[SQL: SELECT count(*) AS element_count, sum(CASE WHEN (first_name IS NULL) THEN %(param_1)s ELSE %(param_2)s END) AS null_count, sum(CASE WHEN (first_name NOT IN (%(first_name_1)s, %(first_name_2)s) AND first_name IS NOT NULL) THEN %(param_3)s ELSE %(param_4)s END) AS unexpected_count
FROM "WORKSPACE_48777448".candidates]
[parameters: {'param_1': 1, 'param_2': 0, 'first_name_1': 'Gather', 'first_name_2': 'Male', 'param_3': 1, 'param_4': 0}]
(Background on this error at: http://sqlalche.me/e/13/f405)
问题是表名没有用双引号括起来,因此 Snowflake 正在寻找CANDIDATES
而不是candidates
. 如果找到表,列名也会出现同样的问题。
我测试过
sql_dataset = great_expectations.dataset.SqlAlchemyDataset(table_name="\"candidates\"",
engine=engine,
schema=creds["schema"])
bu Snowflake 正在寻找一张名为KEBOOLA_274.WORKSPACE_48777448.""candidates""
.
我知道 SQLAlchemy 默认情况下认为小写对象名称不区分大小写,因此它不包含名称。请问有什么办法吗?
解决方案
正如 Mike Walton 在评论中所建议的那样,解决方案是在使用great_expectations
包之前将所有表名大写。
推荐阅读
- c - 来自不同c字符串数组的堆栈上的C字符串大小
- android - React Native AppState 在带有模糊事件的 android 中不起作用
- r - 在 Pivot Wider 之后用 R 中的 NA 替换 NULL
- android - 去除卡片之间的空间
- php - MySQL 和 PHP 具有强制和可选值的多选 id
- python - Choropleth Plotly Graph 未出现在 Dash 上
- javascript - ExtJS 3 保持组合框总是展开
- kotlin - Kotlin:如果未找到匹配项,则过滤列表返回原始列表
- java - Java重力模拟器
- ios - 我们如何在swift ios中为函数编写单元测试用例