目前,我看到了一个 ETL 流程,其中用户创建了用于存储中间结果的表,然后在 ETL 流程结束时删除这些表。
乍一看,这似乎不是正确的做法,因为我一直都知道这应该通过临时表来完成,但是当涉及到与用户争论为什么他应该使用临时表来进行推理时普通表(最后下降)我找不到任何理由。
目前,我看到了一个 ETL 流程,其中用户创建了用于存储中间结果的表,然后在 ETL 流程结束时删除这些表。
乍一看,这似乎不是正确的做法,因为我一直都知道这应该通过临时表来完成,但是当涉及到与用户争论为什么他应该使用临时表来进行推理时普通表(最后下降)我找不到任何理由。
在 Oracle 中,我们可以使用 Jaro-Winkler 测量文本相似度,如下所示:
SELECT UTL_MATCH.JARO_WINKLER_SIMILARITY('STACKEXCHANGE', 'STAMPEXCHANGE') MYSTRING
FROM DUAL;
--98
事实证明,Teradata 也有 Jaro-Winkler,如此处所述。不幸的是,我只是不理解那里的文档和示例。
到目前为止,我在 Teradata 中可以做的是使用 EDITDISTANCE:
SELECT EDITDISTANCE('STACKEXCHANGE', 'STAMPEXCHANGE') MYSTRING;
--2
那么,如何在 Teradata 中使用 Jaro-Winkler 测量文本相似度?谁能给我一些简单的例子?
我最近在 Teradata 中遇到了一个简单的问题:如何在来自字段/列的一对数字之间获取随机数?
函数 RANDOM( lower_bound , upper_bound ) 显然仅限于接受修复号而不是字段/列名。
--THIS ONE FAILS:
WITH TRIAL(CATEGORY, VAL_MIN, VAL_MAX) AS (
SELECT 'A', 0, 3 FROM CTE UNION ALL
SELECT 'B', 1, 9 FROM CTE UNION ALL
SELECT 'C', 2, 5 FROM CTE UNION ALL
SELECT 'D', 1, 12 FROM CTE
), CTE(DUMMY) AS (SELECT 'X')
SELECT T.*,
RANDOM(T.VAL_MIN, T.VAL_MIN) --HERE'S THE PROBLEM
FROM TRIAL T;
--THIS ONE WORKS:
WITH TRIAL(CATEGORY, VAL_MIN, VAL_MAX) AS (
SELECT 'A', 0, 3 FROM CTE UNION ALL
SELECT 'B', 1, 9 FROM CTE UNION ALL
SELECT 'C', 2, 5 FROM CTE UNION ALL
SELECT 'D', 1, 12 FROM CTE
), CTE(DUMMY) AS (SELECT 'X')
SELECT T.*,
RANDOM(1, 7) --HERE'S THE PROBLEM
FROM TRIAL T;
我很确定有一个简单的解决方案。非常感谢任何帮助。
我正在处理一个大型数据集,因此遇到了一些问题。
我有一个数据集,如:
表格1
State ID Conditional_Value
AZ 1 Yes
AZ 2 Yes
AZ 5 Yes
表 2
State ID Conditional_Value
AZ 1 No
AZ 3 No
AZ 7 No
我需要这个返回的是
State ID Conditional_Value
AZ 1 Yes
AZ 2 Yes
AZ 3 No
AZ 5 Yes
AZ 7 No
如果表 2 中有重复的 ID,则从表 1 中获取该 ID 的行并选择它。
我努力了
Select State, ID, Conditional_Value
From Table1
Union
Select State, ID, Conditional_Value
From Table2
Where Table2.ID not in (select Table1.ID from Table1)
但是对于我拥有的大型数据集,运行起来太昂贵了。
我已经查看了有关查找重复项并删除它们然后将非重复项插入另一个表的问题,但我还需要比较这两个单独的表。
如果需要更多信息,请告诉我。谢谢!
我有 Teradata v16.10.0。我想创建具有管理选项的用户:有可能获得授予选择任何表/视图的权限。
如何创建这样的用户权限?
我的桌子:
Date Employee Status
-----------------------------
20171106 001 At work
20171107 001 Sick leave
20171108 001 At work
20171109 001 At work
20171111 001 Sick leave (A gap here)
20171112 001 Sick leave
20171115 001 At work (Another gap)
20171116 001 At work
期望的结果:
Employee Status StartDT EndDT
-------------------------------------------------------------------
001 At work Some time in the history 20171106
001 Sick leave 20171107 20171107
001 At work 20171108 20171109
001 Sick leave 20171111 20171112
001 At work 20171115 20171116
逻辑:我们按状态重新组织源表,而不是按日期。所以日期的差距并不重要,应该被忽略。
如何在 Teradata 15 中执行此操作?
注意:select min(Date), max(Date) group by employee, status;
将不起作用,因为两个“工作中”之间的状态可能会发生变化。