Redshift不支持Arrays,但是我的源数据库在Redshift中有几个我需要的Array列。
尝试将其迁移到Redshift时,应如何处理此字段类型?
答案 0 :(得分:8)
虽然Redshift不支持PostgreSQL意义上的数组,但它提供了一些您可能需要查看的JSON函数:http://docs.aws.amazon.com/redshift/latest/dg/json-functions.html
您可以将数组插入varchar
列:
create temporary table _test (col1 varchar(20));
insert into _test values ('[1,2,3]');
然后使用json_extract_array_element_text()
将产生:
db=# select json_extract_array_element_text(col1, 2) from _test;
json_extract_array_element_text
---------------------------------
3
(1 row)
答案 1 :(得分:0)
用一个永远不会出现在此字段值上的特定字符包围它。
示例:
field = |value1|value2|value3|
查询时,您只需执行以下操作:
where field like '%|value1|%'
还要记住,like
查询非常昂贵,并且会降低集群的性能。
答案 2 :(得分:0)
要查询Redshift表中的数组字段,只需要将表及其数组字段联接起来。
示例
给出一个以相对订单为数组的客户表。
要为有订单的客户选择客户ID和订单发货日期:
SELECT c.id, o.shipdate
FROM spectrum.customers c, c.orders o
对于每个拥有订单的客户c,FROM子句为客户c的每个订单o返回一行。该行组合了客户行c和订单行o。然后,SELECT子句仅保留c.id和o.shipdate。结果如下。
id| shipdate
--|----------------------
1 |2018-03-01 11:59:59
1 |2018-03-01 09:10:00
3 |2018-03-02 08:02:15
参考:https://docs.aws.amazon.com/redshift/latest/dg/tutorial-query-nested-data-sqlextensions.html