期望很高SQLAlchemy不会使用小写的列名

问题描述

我正在尝试使用sqlAlchemy和《大期望》来测试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\"",schema=creds["schema"])

bu SNowflake然后正在寻找一个名为KEBOOLA_274.WORKSPACE_48777448.""candidates""的表。

我知道认情况下sqlAlchemy认为小写对象名称不区分大小写,因此它不包含名称。请问有什么办法解决吗?

解决方法

正如Mike Walton在评论中所建议的那样,解决方案是在使用great_expectations包之前将所有表名都大写。

,

我以《 Great Expectations》的开发者身份在Superduct工作。几周前,我提交了fix for this!现在,您可以在use_quoted_name中指定batch_kwargs.属性,如果将此属性设置为True,它将表和column_names区分大小写,因此访问小写表名应该没有问题,尽管您会还需要确保正确指定了其他表名和列名的大小写。