我想从teradata的"帮助表"函数生成的数据集中创建一个表,这样我就可以添加关于表的更多信息,并能够按条件过滤行.该表有400多列,因此管理非常方便.我希望能够做类似于创建表的选项,但它不能与帮助表语法一起使用.如果没有将数据导出到excel,然后手动创建表模式并重新导入表,是否有人知道如何将帮助表查询的输出转换为teradata中的表?
是否有可能以某种方式在TD的case语句中使用select子句(而不是执行联接)?
我想做这样的事情:
SELECT
id,
, count(*)
, (CASE WHEN id IN ANY (SELECT DISTINCT ID FROM PARTICIPANTS_TABLE)
THEN 1 ELSE 0
end) AS participant
FROM EVERYONE_TABLE
GROUP BY id
Run Code Online (Sandbox Code Playgroud)
我得到的错误是“ CASE表达式的WHEN子句中的非法表达式”。
我正在从事Teradata到Oracle的迁移项目。我如何修改以下在Teradata中使用QUALIFY的查询。
//查询1
SELECT S.ID as Id,
S.MP_CD as Code,
S.GM_CD as GmCode,
S.GM_MSR_NBR as Mea_Year,
S.STTS_CD as YearCode,
S.TRMNTN_DTM as TerminationDate
FROM PD.RVY S, LOAD_LOG TLL
WHERE S.UPDTD_LOAD = TLL.LOG_KEY AND TLL.BLSH_CD = 'Y' AND S.STTS_CD IN ( 'C', 'P' )
QUALIFY ROW_NUMBER () OVER (PARTITION BY S.GM_CD ,S.MP_CD ,S.GM_MSR_NBR,S.STTS_CD
ORDER BY S.SO_DTM DESC
) = 1;
Run Code Online (Sandbox Code Playgroud)
//查询2
SELECT SP.ID,
SP.SO_DTM,
SP.TAX_ID,
SP.USER_ID,
SP.FRST_NM,
SP.LAST_NM,
SP.PHONE_NBR,
QSRP.TAX_ID,
QSRP.ROW_ID,
MAX(SP.SO_DTM) OVER (PARTITION BY SP.ID, SP.TAX_ID) MAX_SO_DTM
FROM VOPR_RMSY SP,VOPR_RMSY_SPNS QSRP
WHERE …Run Code Online (Sandbox Code Playgroud) 我有下表
personid talent
1 swim
2 play
1 play
1 swim
2 play
3 swim
3 swim
2 play
Run Code Online (Sandbox Code Playgroud)
因此,人1可以游泳和玩耍.人2只能玩.人3只能游泳.
我需要得到以下结果
personid talent
1 both
2 play
3 swim
Run Code Online (Sandbox Code Playgroud)
我怎么能用这个exists呢?
我试过了
SELECT DISTINCT personid,
CASE WHEN (EXISTS(
SELECT * FROM mytable
-- I got stuck
Run Code Online (Sandbox Code Playgroud)
PS:我有一个很长的解决方案..但我不喜欢它,因为它很长
SELECT DISTINCT dis2.personid , CASE WHEN talcount = 2 THEN 'both'
ELSE talent END AS talent
FROM
(
SELECT personid , COUNT(talent) talcount
FROM
(
SELECT DISTINCT personid , talent
FROM my_table …Run Code Online (Sandbox Code Playgroud) 这是我的Table1
personid
1
?
2
3
4
?
6
Run Code Online (Sandbox Code Playgroud)
这是我的查询
select *
from table2
where personid not in
(
select personid
from table1
)
Run Code Online (Sandbox Code Playgroud)
结果是 nothing
这是我的第二个查询
select *
from table2
where personid not in
(
select personid
from table1
where personid is not null
)
Run Code Online (Sandbox Code Playgroud)
结果是 ok
问题:为什么第一个查询不起作用?我看不出任何逻辑问题.是的,是否可以null提升teradata?
sqoop将数据从Teradata传输到HDFS:获取如下错误:-bash-4.1 $ sqoop import --connection-manager com.cloudera.sqoop.manager.DefaultManagerFactory --driver com.teradata.jdbc.TeraDriver \
--connect jdbc:teradata://dwsoat.dws.company.co.uk/DATABASE=TS_72258_BASELDB\--username userid -P --table ADDRESS --num-mappers 3\--target-dir/user/nathalok /地址警告:/apps/cloudera/parcels/CDH-5.1.3-1.cdh5.1.3.p0.12/bin/../lib/sqoop/../accumulo不存在!Accumulo进口将失败.请将$ ACCUMULO_HOME设置为Accumulo安装的根目录.14/10/29 14:00:14 INFO sqoop.Sqoop:运行Sqoop版本:1.4.4-cdh5.1.3 14/10/29 14:00:14 WARN tool.BaseSqoopTool:在命令行设置密码是不安全的.考虑使用-P代替.14/10/29 14:00:14错误sqoop.ConnFactory:Sqoop无法正确创建连接管理器.有些连接器支持显式--driver,有些则不支持.请尝试指定--driver或将其保留.14/10/29 14:00:14 ERROR tool.BaseSqoopTool:创建数据库管理器时出错:java.io.IOException:java.lang.NoSuchMethodException:com.cloudera.sqoop.manager.DefaultManagerFactory.(java.lang.String, org.apache.sqoop(orn.apache) .tool.ImportTool.init(ImportTool.java:84)atg.apache.sqoop.tool.ImportTool.run(ImportTool.java:494)org.apache.sqoop.Sqoop.run(Sqoop.java:147)at at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)org.apache.sqoop.Sqoop.runSqoop(Sqoop.java:183)org.apache.sqoop.Sqoop.runTool(Sqoop.java: 222)org.apache.sqoop.Sqoop.runTool(Sqoop.java:231)at org.apache.sqoop.Sqoop.main(Sqoop.java:240)引起:java.lang.NoSuchMethodException:com.cloudera.sqoop java的java.lang.Class.getConstructor0(Class.java:2810)中的.manager.DefaultManagerFactory.(java.lang.String,com.cloudera.sqoop.SqoopOptions).lang.Class.getDeclaredConstructor(Class.java:2053)at org.apache.sqoop.ConnFactory.getManager(ConnFactory.java:151)... 9更多
-bash-4.1 $
任何帮助将不胜感激.
真的很简单问:
Teradata SQL Assistant的代码默认字体是可变宽度.这对于格式化和可读性等原因而言是令人沮丧的.是否可以将字体更改为Courier New在"查询"窗口类似内容?谷歌搜索,仔细阅读选项菜单,查找Teradata文档并没有产生任何结果......
请帮我用等宽字体编码!
我有一个名为Grades的表,其中包含每年的结果。
我想选择每年得分超过70%的学生所占的百分比。
像2012年一样,每100个国家中就有40个获得了70%以上的收入。因此,2012年的百分比为40%。
我在子查询中做到了,但我想知道是否可以不使用子查询。
我正在使用Teradata版本6,该版本支持所有基本sql查询。
我的表架构是。
Table name: Grades<br>
Columns: Name, Marks, Year.
Run Code Online (Sandbox Code Playgroud)
我能做的最好的事情是:
select (count(marks)/count(*))*100.0
from Grades
where marks > 70
Group by year;
Run Code Online (Sandbox Code Playgroud) 几个小时后,我被困在类似的东西上,并在一个Teradata查询中输出了一个不那么混乱的代码,用于输出25%,50%,75%的百分位数.可以进一步扩展以产生" 5点总结 ".根据您的人口估计值,最小和最大变化静态值.
有人要求优雅的方法.分享我的.
这是代码:
SELECT MAX(PER_MIN) AS PER_MIN,
MAX(PER_25) AS PER_25,
MAX(PER_50) AS PER_50,
MAX(PER_75) AS PER_75,
MAX(PER_MAX) AS PER_MAX
FROM (SELECT CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.01 AS INT) THEN DURATION_MACRO_CURR END AS PER_MIN,
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.25 AS INT) THEN DURATION_MACRO_CURR END AS PER_25,
CASE WHEN ROW_NUMBER() OVER(ORDER BY DURATION_MACRO_CURR ASC) = CAST(COUNT(*) OVER() * 0.50 AS INT) THEN DURATION_MACRO_CURR END AS PER_50 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用ORDER BY在SQL中创建一个volatile表,我收到一个错误.
CREATE VOLATILE TABLE orderd_dates AS
(SELECT * FROM date_table
ORDER BY id_date)
with data primary index (id_date) on commit preserve rows;
Run Code Online (Sandbox Code Playgroud)
错误是:子查询中不允许ORDER BY.
如果我不能使用order by,如何创建一个有序的易失性表?
teradata ×10
sql ×7
create-table ×1
database ×1
group-by ×1
hadoop ×1
hdfs ×1
hive ×1
oracle11g ×1
percentile ×1
quartile ×1
ranking ×1
sql-order-by ×1
sqoop ×1
subquery ×1