Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 《远大前程》SQLAlchemy不包含小写的列名_Python_Sqlalchemy_Snowflake Cloud Data Platform_Great Expectations - Fatal编程技术网

Python 《远大前程》SQLAlchemy不包含小写的列名

Python 《远大前程》SQLAlchemy不包含小写的列名,python,sqlalchemy,snowflake-cloud-data-platform,great-expectations,Python,Sqlalchemy,Snowflake Cloud Data Platform,Great Expectations,我正试图使用SQLAlchemy和《远大前程》来测试存储在Snowflake DB中的数据集的数据质量。数据集称为候选者,感兴趣的列称为first_name 然而,当我跑的时候 sql_dataset = great_expectations.dataset.SqlAlchemyDataset(table_name="candidates", engine=engine, schema=creds["schema"]) sql_dataset.expect

我正试图使用SQLAlchemy和《远大前程》来测试存储在Snowflake DB中的数据集的数据质量。数据集称为候选者,感兴趣的列称为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正在寻找候选项而不是候选项。如果找到表,列名也会出现同样的问题

我已经测试过了

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软件包之前将所有表名大写。

我为超导公司工作,是一名满怀期望的开发人员。几周前我提交了!现在,您可以在batch_kwargs中指定use_quoted_name属性。如果设置为True,则会将您的表名和列名视为区分大小写的,因此访问小写表名应该不会有问题,不过您还需要确保正确指定了其他表名和列名的大小写。

创建候选表时,是否在其周围创建了它?如果你没有,那么就不会有任何问题。根据您的日志,唯一包含在引号中的是来自Workspace48777448.1的模式。因此,如果在创建模式时,将其括起来,并且是小写的,则需要在配置文件中对模式进行小写。我使用小写名称创建了它-表的实际名称为,因此,我需要发送一个类似于select*from SUMBERTIONS的查询。请将您的表以雪花形式重命名为SUMBERTIONS,或者干脆不加引号,这样您就可以完成所有设置。出于这个原因,在Snowflake中用引号将表名括起来不是一个好的做法。不幸的是,在我的用例中,这不是一个选项,我正在开发一个现有软件的扩展,调整它需要进行重大更改。即使我成功地做到了这一点,列名也会出现同样的问题查询将被解析为select col_name from TABLE_name,snowflake将查找列名的大写版本。