我在SQL Server中有半打视图需要在Teradata中复制,但是我无法找到与SQL元数据表相当的TD.我想复制以下功能(我认为这是相当自我解释的):
select table_name, column_id ordinal_position, column_name,
data_type, char_length char_max_length,
data_precision numeric_precision, data_scale numeric_scale
from user_tab_columns
select name as FUNCTION_NAME
from sys.objects
where type_desc='SQL_SCALAR_FUNCTION'
select TABLE_NAME as VIEW_NAME
from INFORMATION_SCHEMA.VIEWS
Run Code Online (Sandbox Code Playgroud)
我还想知道在线是否有任何可用的Teradata参考资料; 我遇到的一切似乎都是广告而不是实用信息.
我触及了Teradata.我从未接触过hadoop,但从昨天开始,我正在研究这个问题.通过对两者的描述,它们似乎是可以互换的,但在一些文章中写道它们用于不同的目的.但我发现的一切都是模糊的.我很迷惑.
有谁有经验吗?他们之间有什么严重的区别?
简单示例:我想构建ETL,它将转换数十亿行原始数据并将它们组织成DWH.然后对它们进行一些资源昂贵的分析.为何使用TD?为何选择Hadoop?或者为什么不呢?
TeraData SQL中"TOP"和"SAMPLE"有什么区别?它们是一样的吗?
一般来说,使用JOIN选择行与EXISTS where子句之间是否存在性能差异?搜索各种问答网站表明联接更有效率,但我记得很久以前在Teradata中学习EXISTS更好.
我确实看到了其他SO答案,像这样和这个,但我的问题是特定于Teradata.
例如,考虑这两个返回相同结果的查询:
select svc.ltv_scr, count(*) as freq
from MY_BASE_TABLE svc
join MY_TARGET_TABLE x
on x.srv_accs_id=svc.srv_accs_id
group by 1
order by 1
Run Code Online (Sandbox Code Playgroud)
-和-
select svc.ltv_scr, count(*) as freq
from MY_BASE_TABLE svc
where exists(
select 1
from MY_TARGET_TABLE x
where x.srv_accs_id=svc.srv_accs_id)
group by 1
order by 1
Run Code Online (Sandbox Code Playgroud)
两个表上的主索引(唯一)是'srv_accs_id'.MY_BASE_TABLE相当大(2亿行),MY_TARGET_TABLE相对较小(200,000行).
EXPLAIN计划有一个显着的区别:第一个表示两个表"通过RowHash匹配扫描"连接,第二个表示"通过全行扫描".两者都说它是"全AMP加入步骤",总估计时间相同(0.32秒).
两个查询都执行相同的操作(我正在使用Teradata 13.10).
类似的实验找到一个比较LEFT OUTER非匹配具有相应的连接是NULL where子句的NOT EXISTS子查询也确实表现出的性能差异:
select svc.ltv_scr, count(*) as freq
from MY_BASE_TABLE svc
left outer join MY_TARGET_TABLE x
on x.srv_accs_id=svc.srv_accs_id …
Run Code Online (Sandbox Code Playgroud) 我有这样的数据,我想总结领域USAGE_FLAG
,但复位时降至为0或移动到一个新的ID保持数据集的排序SU_ID
和WEEK
:
SU_ID WEEK USAGE_FLAG
100 1 0
100 2 7
100 3 7
100 4 0
101 1 0
101 2 7
101 3 0
101 4 7
102 1 7
102 2 7
102 3 7
102 4 0
Run Code Online (Sandbox Code Playgroud)
所以我想创建这个表:
SU_ID WEEK USAGE_FLAG SUM
100 1 0 0
100 2 7 7
100 3 7 14
100 4 0 0
101 1 0 0
101 2 7 7
101 3 0 0
101 …
Run Code Online (Sandbox Code Playgroud) 我的要求是
- 将数据从Oracle移动到HDFS
- 处理HDFS上的数据
- 将处理后的数据移至Teradata.
还需要每15分钟进行一次整个处理.源数据的量可以接近50GB,并且处理的数据也可以是相同的.
在网上搜索了很多,我发现了
- ORAOOP将数据从Oracle移动到HDFS(使用shell脚本编写代码并安排它以所需的时间间隔运行).
- 通过Custom MapReduce或Hive或PIG进行大规模处理.
- SQOOP - 用于将数据从HDFS移动到Teradata的Teradata Connector(再次使用带有代码的shell脚本然后安排它).
这是一个正确的选择,这是否适用于所需的时间段(请注意,这不是每日批次左右)?
我发现的其他选项如下
- STORM(用于实时数据处理).但我无法找到开箱即用的oracle Spout或Teradata螺栓.
- 任何开源ETL工具,如Talend或Pentaho.
请分享您对这些选项的想法以及任何其他可能性.
我想在Teradata中创建表.因此我使用这种语法:
CREATE VOLATILE TABLE a AS
(
Select * FROM ...
) WITH DATA PRIMARY INDEX ( ACCOUNT_ID )
;
Run Code Online (Sandbox Code Playgroud)
内部SELECT语句产生4行.但是,当我运行整个查询时,结果数据集没有任何行.奇怪,我知道 - 这就是我写作的原因.请帮忙.谢谢.
不知道这里发生了什么以及为什么这不起作用.我收到以下错误:
"派生表中的所有表达式都必须具有明确的名称" - 使用teradata.
select clm.c_clm
,clm.c_loc
from
(select *
from pearl_p.TLTC900_CLM clm) as cl
left join
(select
max(av.d_usr_udt_lst)
from pearl_p.TLTC913_AVY av
group by 1) as avy
on cl.i_sys_clm = avy.i_sys_clm
Run Code Online (Sandbox Code Playgroud) Teradata中的视图和易失性表之间有什么区别?据我所知,在会话结束时删除了一个volatile表.此外,只有我才能看到易失性表而不是视图.还有其他重大差异吗?
我想CREATE RECURSIVE VIEW
从以下可重现的示例中在Teradata中创建一个递归视图(即):
CREATE VOLATILE TABLE vt1
(
foo VARCHAR(10)
, counter INTEGER
, bar INTEGER
)
ON COMMIT PRESERVE ROWS;
INSERT INTO vt1 VALUES ('a', 1, '1');
INSERT INTO vt1 VALUES ('a', 2, '2');
INSERT INTO vt1 VALUES ('a', 3, '2');
INSERT INTO vt1 VALUES ('a', 4, '4');
INSERT INTO vt1 VALUES ('a', 5, '1');
INSERT INTO vt1 VALUES ('b', 1, '3');
INSERT INTO vt1 VALUES ('b', 2, '1');
INSERT INTO vt1 VALUES ('b', 3, '1');
INSERT …
Run Code Online (Sandbox Code Playgroud)