如何应对Redshift缺乏对阵列的支持

时间:2016-07-16 16:38:52

标签: amazon-web-services amazon-redshift

Redshift不支持Arrays,但是我的源数据库在Redshift中有几个我需要的Array列。

尝试将其迁移到Redshift时,应如何处理此字段类型?

3 个答案:

答案 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