1

我有一个这样创建的表:

CREATE TABLE IF NOT EXISTS MyDataBase.Table (
  `date`     DATE,
  `name`     STRING,
  `isTarget` BOOLEAN
) USING DELTA LOCATION '/mnt/path/to/folder/'

我需要使用 SQL 在表中手动插入值。我试着这样做:

INSERT INTO CalendrierBancaire.Data VALUES (
  ('2022-01-01', 'New Year', True)
)

但它在这个错误上失败了:

Error in SQL statement: AnalysisException: cannot resolve 'CAST(`col1` AS DATE)' due to data type mismatch: cannot cast struct<col1:string,col2:string,col3:boolean> to date; line 1 pos 0;

我还尝试将日期字符串替换为:

  • CAST('2022-01-01' AS DATE)
  • to_date('2022-01-01', 'yyyy-MM-dd')

但两者都没有工作并返回相同的错误。看起来 SQL 解析器想要将整行转换为日期,这很愚蠢。你知道我该怎么做吗?

谢谢。

PS:在实际使用中,我有将近 30 到 40 行要插入,所以让一个带有 CAST 表达式的变量同时对于所有值都很难实现。

4

1 回答 1

0

看起来问题在于您在要插入的值周围有额外的括号,因此它被解释为单列 - 您需要使用以下语法(请参阅文档):

INSERT INTO CalendrierBancaire.Data VALUES 
  ('2022-01-01', 'New Year', True)

或者如果您要插入多行,则通过逗号列出它们:

INSERT INTO CalendrierBancaire.Data VALUES 
  ('2022-01-01', 'New Year', True),
  ('2022-02-01', 'New Year 2', True)

PS虽然它对我有用,即使有额外的括号

于 2022-02-04T10:39:11.710 回答