由于 DATE 类型无效,带批量选项的 Openrowset 无法检索记录

Openrowset with bulk option cannot retrieve records due to an invalid type DATE

尝试使用 openrowsetbulk 选项读取镶木地板文件时遇到以下错误:

Error handling external file: 'Inserting value to batch for column type DATE failed. Invalid argument provided.'

此问题表示无法读取文件,因为数据包含非 DATE 类型的值 - 事实上,有 undefined0001-01-01 记录,所以当 BULK 操作执行这些值防止加载整个镶木地板文件(见下面的代码)。

SELECT
TOP 100 
POST_SEARCH_DATE,
SEARCH_DATE 

FROM
OPENROWSET(
    BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
    FORMAT = 'PARQUET'
    
) AS [result]

我认为的一种替代方法是将列转换为 varchar 以绕过错误,但不幸的是,这没有任何区别(见下文)。

SELECT
TOP 100 
POST_SEARCH_DATE,
SEARCH_DATE

FROM
OPENROWSET(
    BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
    FORMAT = 'PARQUET'
    
) AS [result]

WHERE cast(POST_SEARCH_DEPARTURE_DATE as varchar(100))!= 'undefined'

and cast (SEARCH_DEPARTURE_DATE as varchar(100)) != 'undefined'
and cast (SEARCH_DEPARTURE_DATE as varchar(100)) != '0001-01-01'
and cast(POST_SEARCH_DEPARTURE_DATE as varchar(100))!= '0001-01-01' 

我找到了一些关于将每条记录插入临时 table 的建议,从那里您可以忽略失败的记录。有人可以帮我提供有关此解决方案或其他替代方案的更多详细信息吗?

您是否尝试过在使用 OPENROWSET 的同时使用 WITH 来定义数据类型?

SELECT
  TOP 100 
  POST_SEARCH_DATE,
  SEARCH_DATE,
  EXAMPLE_COL


FROM
OPENROWSET(
    BULK 'https://test/refined-parquet/data/v1.0/loaddt=2022-01-01/**',
    FORMAT = 'PARQUET'
    WITH (
        [SEARCH_DEPARTURE_DATE] VARCHAR(100) COLLATE Latin1_General_BIN2 3,
        [POST_SEARCH_DEPARTURE_DATE] VARCHAR(100) COLLATE Latin1_General_BIN2 2,
        [EXAMPLE_COL] VARCHAR(100)
) AS [r]