redshift中是否有序号生成函数?还是一个组合了值并且给出数字哈希键的函数?AWS中的序号生成函数redshift
回答
目前没有序列的概念(如Oracle中所见)。
您有几种选择:在整套
- 号码表
- RANK()或ROW_NUMBER()的窗函数。请注意,如果您拥有多节点群集,则可能会产生一些负面的性能影响。
- 定义为IDENTITY(seed,step)的列。请注意,IDENTITY序列可能是'稀疏'(例如,序列中有空位)。
我是Redshift的新手,我发现本文寻找一个常见的序列,这在Amazon数据库中不受支持。我发现这个解决方案我会用一个完整的例子报告,使用ROW_NUMBER。
我有模式sta and dim。在sta我有临时表,而在昏暗我有维度表我想用ID填充。我有一个信息来源,其中包含字段trk_key,名称包含例如一些发布者。
CREATE TABLE sta.publisher (
trk_key VARCHAR(20),
name VARCHAR(225)
);
CREATE TABLE dim.publisher (
id SMALLINT,
trk_key VARCHAR(20),
name VARCHAR(255),
PRIMARY KEY (id)
);
首先我截断sta.publisher表并加载有一个CSV文件。然后我启动下面的查询
-- This query is idempotent:
-- it will insert a publisher found in sta.publisher table only if
-- it is not already in dim.publisher table.
INSERT INTO dim.publisher
SELECT
-- Generate id using max id found in dim.publisher.
-- Start with id=1 if dim.publisher is empty.
(
SELECT NVL(MAX(id), 0)
FROM dim.publisher
) + ROW_NUMBER() OVER() AS id,
trk_key,
name
FROM sta.publisher
-- Only insert record if trk_key is not found in dim.publisher table.
WHERE trk_key NOT IN (
SELECT trk_key
FROM dim.publisher
)
这里是另一种方式产生1万个号码
with seq_0_9 as (
select 0 as num
union all select 1 as num
union all select 2 as num
union all select 3 as num
union all select 4 as num
union all select 5 as num
union all select 6 as num
union all select 7 as num
union all select 8 as num
union all select 9 as num
), seq_0_999 as (
select a.num + b.num * 10 + c.num * 100 as num
from seq_0_9 a, seq_0_9 b, seq_0_9 c
)
select a.num + b.num * 1000 as num
from seq_0_999 a, seq_0_999 b
order by num
这很棘手。如何将它变成3000万? – Mio
不错的技巧来生成一个小序列,而不是 – nightgaunt
您仍然可以查询Posgres功能generate_series(start, stop, step)
但它不是一个支持的功能,只能运行在领导节点上,这使得它相当无用,但嘿,你仍然可以select generate_series(1,100)
并获得100个数字的列表。你只能在领导者节点上用而不是做任何事情。
http://docs.aws.amazon.com/redshift/latest/dg/c_unsupported-postgresql-functions.html
- 1. AWS Redshift表值函数
- 2. 如何计算AWS Redshift的中位数?
- 3. AWS Redshift数据处理
- 4. 生成序号
- 5. AWS Redshift列限制?
- 6. AWS Redshift + Tableau Performance Booster
- 7. AWS Redshift - 不区分大小写排序
- 8. AWS Redshift的负载测试
- 9. AWS lambda函数一生
- 10. 查询AWS Redshift中的JSON字符串
- 11. 在AWS云(RedShift)上测试数据库?
- 12. 使用AWS Redshift实现数据限制
- 13. AWS Redshift最高限额
- 14. INET_ATON等效于AWS Redshift
- 15. 注册AWS Redshift活动
- 16. 使用JDBC连接AWS Redshift
- 17. Redshift窗口函数中的条件
- 18. 生成的函数
- 19. 生成的函数
- 20. 生成函数
- 21. 生成函数
- 22. 生成有序组合的函数
- 23. Redshift的UNLOAD查询生成的S3请求的数量
- 24. Redshift Postgres窗口函数 - 秩()
- 25. Oracle到Redshift trunc函数
- 26. SQL生成序列号
- 27. XSLT序列号生成
- 28. 生成编号顺序
- 29. 生成一个序列号
- 30. Sql server生成序列号
我们有多节点红移群集。身份 - 预计会提供独特的价值而不会发生碰撞? – user3279189
是的,IDENTITY值不会相互碰撞,但它们不保证是连续的,例如,对于8节点群集,您将获得1,9,17,25个值的运行。 –
谢谢..我知道了... – user3279189