【问题标题】:Convert teradata table columns to comma seperated values将 teradata 表列转换为逗号分隔值
【发布时间】:2016-04-10 02:46:13
【问题描述】:

需要您的帮助来解决我正在努力解决的特定问题

我有一个 teradata 表,如下所示。

Queryid Databasename    Tablename
101     DB1             TB1
101     DB2             TB2
101     DB1             TB3
102     DB3             TB3
102     DB4             TB4
.       .               .
.       .               .
.       .               .

我需要以下格式的输出。

Queryid    Newcol
101        DB1.TB1,DB2.TB2,DB1.TB3
102        DB3.TB3,DB4.TB4
.          .......   
.          .......

我使用的是 TD13.10,没有 XML 服务,TDStats 功能也不可用。

任何帮助都会是巨大的..

谢谢

【问题讨论】:

  • 看起来像一个分析 QryLogObjectsV 的查询,你要处理的数据量是多少?你对结果做了什么?
  • 嗨 Dieter,我正在尝试处理 1 个月的数据,我正在尝试生成一个报告,其中每个 queryid 都有一行,并且在该行中我有我的 totalampcputime、responsetime 和访问的对象查询ID。如果我对每个 queryid 访问的所有对象都有多行,则 ampcputime 和响应时间将乘以总行数,因此最终结果将不正确。

标签: teradata


【解决方案1】:

您可以使用递归。虽然您必须使用另一个表来存储 and 在递归中使用该表来按行号连接值。

CREATE VOLATILE TABLE temp_tbl AS (
 SELECT
   queryid                     
   ,databasename ||'.'||tablename                                                           
   ,ROW_NUMBER() OVER (PARTITION BY queryid ORDER BY queryid) AS rnk
FROM temp
) WITH DATA PRIMARY INDEX(parent_id) ON COMMIT PRESERVE ROWS

WITH RECURSIVE test1(query,databasename,tablename,LVL)


AS
   (
    SELECT queryid,databasename,tablename, 1
    FROM <tablename>
    WHERE rnk = 1
    UNION ALL
    SELECT  queryid, TRIM(databasename) || ', ' || TRIM(tablename),LVL+1
    FROM temp_tbl INNER JOIN test1
    ON queryid = query
   AND temp_tbl.rn = test1.lvl+1
   )
   SELECT query,databasename,tablename,LVL
   FROM test1
QUALIFY RANK() OVER(PARTITION BY query ORDER BY LVL DESC) = 1;

【讨论】:

  • 感谢您的回复 Aritra .. 只是一些问题 .. 以下符号表示什么... 1) temp (我假设这是用于存储正在存储的数据的表已处理,2) 不确定 PRIMARY INDEX(parent_id) 是什么意思,3) FROM ,这里应该使用什么表 4) INNER JOIN rec_test,我找不到这个表
  • @SRG .. 是的 temp 只是我用来存储数据的表的随机名称。主索引是我在易失性表 temp_tbl 上定义的索引。对于主索引中的概念,您可以在 wiki/google 中搜索。内部连接部分将是我编辑过的 test1,这是逻辑的递归方面,有助于获得您想要的结果。如果这个答案有助于实现您的目标,请接受它。
  • 非常感谢 Aritra,会试一试,只是最后一个问题.. 你在递归查询 SELECT queryid,databasename,tablename, 1 FROM 中提到过, 是什么代表?
  • @SRG .. 它代表您选择的表格(再次,我选择的随机名称)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2016-10-24
  • 2021-09-06
  • 1970-01-01
相关资源
最近更新 更多