WITH TEMP AS
(SELECT if(max(seq) IS NULL, 0, max(seq)) max_seq
FROM seq_test)
SELECT col_id,
col_val,
row_number() over() + max_seq AS seq
FROM souce_table
INNER JOIN TEMP ON 1 = 1;
seq_test: Its your target table.
source_table: Its your source.
Seq: Surrogate key / Sequence number / Key column
4条答案
按热度按时间oxiaedzo1#
我想你在找
ROW_NUMBER()
. 你可以在这里了解它和其他“窗口”功能。例子:
cig3rfwq2#
如果要使用多个Map器和大型数据集,请尝试使用以下自定义项:https://github.com/manojkumarvohra/hive-hilo
它利用zookeeper作为中央存储库来维护序列状态
mm5n2pyu3#
@是的,我试过了。
我们尝试使用row\u number函数,但是当我们尝试在小尺寸数据(例如包含500行的文件)上查询时,它工作得非常好。但当涉及到大数据时,查询会运行几个小时,最终无法生成输出。
我了解到以下信息:
使用简单的udf无法在分布式处理查询中生成顺序。这是因为这种方法将需要一些集中的实体来跟踪计数器,这也将导致分布式查询的严重低效,因此不建议应用。
hgb9j2n64#
查询以生成序列。我们也可以将其用作维度表中的代理键。