我在Redshift表上有一个标准listings
表,包含所有varchars(由于加载到数据库中)
这个查询(简化)给了我错误:
with AL as (
select
L.price::int as price,
from listings L
where L.price <> 'NULL'
and L.listing_type <> 'NULL'
)
select price from AL
where price < 800
和错误:
-----------------------------------------------
error: Invalid digit, Value 'N', Pos 0, Type: Integer
code: 1207
context: NULL
query: 2422868
location: :0
process: query0_24 [pid=0]
-----------------------------------------------
如果我删除where price < 800
条件,查询返回就好......但我需要where条件。
我还检查了price
字段的数字有效性,看起来都很好。
在玩完之后,这实际上使它起作用,我无法解释原因。
with AL as (
select
L.price::int as price,
from listings L
where L.price <> 'NULL'
and L.listing_type <> 'NULL'
limit 10000000000
)
select price from AL
where price < 800
请注意,该表的记录远少于限制中所述的数字。
任何人(可能来自Redshift工程师团队)都能解释为什么会这样吗?可能与查询计划的执行和并行化有关?
答案 0 :(得分:0)
我的查询可以简单地表达为:
SELECT TOP 10 field1, field2
FROM table1
INNER JOIN table2
ON table1.field3::int = table2.field3
ORDER BY table1.field1 DESC
删除::int
的显式强制转换为我解决了类似的错误。
同时,postgresql在本地需要&#34; :: int&#34;工作。
对于它的价值,我的本地postgresql版本是
PostgreSQL 9.6.4 on x86_64-apple-darwin16.7.0, compiled by Apple LLVM version 8.1.0 (clang-802.0.42), 64-bit
答案 1 :(得分:0)
Loading CSV data with NaN into AWS Redshift
我在搜索谷歌时发现了这篇文章,但上面的链接有我需要的东西。我正在导入一个值为NaN的数字列,红色数字不支持。