从数据集 SQLQueryDataSet 加载数据时失败

问题描述

我收到此错误

DataSetError: Failed while loading data from data set sqlQueryDataSet(load_args={},sql=select * from table)

当我运行时(在 kedro jupyter notebook 中):

%reload_kedro

c:\users\name.virtualenvs\pipenv_kedro\lib\site-packages\ipykernel\ipkernel.py:283:DeprecationWarning: should_run_async 将来不会自动调用 transform_cell。请将结果传递给 transformed_cell 参数以及在 IPython 7.17 及更高版本中 preprocessing_exc_tuple 的转换期间发生的任何异常。 和 should_run_async(code) 2021-04-21 15:29:12,278 - kedro.framework.session.store - INFO - read() 未针对 BaseSessionStore 实现。假设空商店。 2021-04-21 15:29:12,696 - 根 - 信息 - ** Kedro 项目项目 2021-04-21 15:29:12,698 - root - INFO - 定义的全局变量 contextsessioncatalog 2021-04-21 15:29:12,703 - 根 - 信息 - 注册线魔法 run_viz

那么:

catalog.list()
#['table','parameters']
catalog.load('table')

我的 catalog.yml 文件包含的位置:

table:
  type: pandas.sqlQueryDataSet
  credentials: secret
  sql: select * from table
  layer: raw

但是,当我运行它时(在同一个 kedro jupyter notebook 中),我能够收回预期的结果:

from kedro.extras.datasets.pandas import sqlQueryDataSet

sql = "select * from table"
credentials = {
    "con": secret
}
data_set = sqlQueryDataSet(sql=sql,credentials=credentials)

sql_data = data_set.load()

我该如何解决这个错误

解决方法

我认为差异来自凭据。在你的目录中你有

table:
  type: pandas.SQLQueryDataSet
  credentials: secret

但是在你测试的笔记本中

credentials = {
    "con": secret
}

yaml 文件中映射的值应与 credentials.yml 中的条目名称匹配,例如

# in catalog.yml
table:
  type: pandas.SQLQueryDataSet
  credentials: db_creds

# in credentials.yml
db_creds:
    con: secret