在oracle中,我们将在创建此表时在select上使用rownum.现在在teradata,我似乎无法让它工作.除非我一起使用3列,否则我没有可以排序的列并且具有唯一值(大量重复).
旧的方式是这样的,
create table temp1 as
select
rownum as insert_num,
col1,
col2,
col3
from tables a join b on a.id=b.id
;
Run Code Online (Sandbox Code Playgroud) 我必须根据以下实现做一些逻辑.
我有一个高达36位的大数字,例如913695089923267549815145223638290430(由不同的应用程序随机生成).我需要将它除以任何长度较小的数字,例如70368844197664;(由不同的应用程序随机生成)假设我得到商数为19956694.3256
对于我的代码,只有十进制前的商的最后一位数(即4)很重要.目的是检查商是偶数还是奇数,如果可能的话也是最后一位数的值.
我不能使用简单的DB函数,如模数或除法,因为它非常耗时.有没有更快捷的有效方式?任何建议将受到高度赞赏.
非常感谢.
关心Neeraj
我在Teradata中有两个表:Table_A和Table_B.他们之间是LEFT JOIN.之后我正在制作SELECT语句,其中包含两个表的属性:
SELECT
attribute_1
attribute_2
...
attribute_N
Run Code Online (Sandbox Code Playgroud)
后来,我使用SUM函数进行某些计算.这些函数看起来像这样:
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
Run Code Online (Sandbox Code Playgroud)
(在此示例中,使用选择部分中的属性).
但我也在CASE部分属性中使用了不在select语句中的东西 - 有点谎言:
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
Run Code Online (Sandbox Code Playgroud)
当然最后我正在做GROUP BY 1,2,...,N
我得到的错误是"选定的非聚合值必须是关联组的一部分." 此外,我已经检查了SELECT部分中所选属性数十亿倍,它是N.问题是 - 为什么我会收到此错误?是因为我在SUM部分使用,即CASE部分属性(attribute_X和attribute_Y),它们不包含在SELECT部分中?
最终陈述的蓝图看起来很像.像这样:
INSERT INTO table_new
SELECT
attribute_1,
attribute_2,
...
attribute_N,
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
) as sum_a,
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
) …Run Code Online (Sandbox Code Playgroud) 我正在为Teradata编写SQL.我需要使用连接来连接多个表中的数据.通常使用子查询或创建临时表并一次追加一个连接列更快吗?我正在尝试自己测试,但网络流量使我很难分辨哪个更快.
例A:
SELECT a.ID, a.Date, b.Gender, c.Age
FROM mainTable AS a
LEFT JOIN (subquery 1) AS b ON b.ID = a.ID
LEFT JOIN (subquery 2) AS c ON c.ID = a.ID
Run Code Online (Sandbox Code Playgroud)
或者我可以......
例B:
CREATE TABLE a AS (
SELECT mainTable.ID, mainTable.Date, sq.Gender
FROM mainTable
LEFT JOIN (subquery 1) AS sq ON sq.id = mainTable.ID
)
CREATE TABLE b AS (
SELECT a.ID, a.Date, a.Gender, sq.Age
FROM a
LEFT JOIN (subquery 2) AS sq ON sq.id = a.ID
)
Run Code Online (Sandbox Code Playgroud)
假设我之后清理了所有东西,一种方法比另一种更好吗?再一次,我想自己测试一下,但网络流量有点让我感到困惑.
编辑: …
假设我有一个返回如下值的查询:
id type value
aaa 1a 10
aaa 1b 20
aaa 1c 7
bbb 2a 10
bbb 1a 5
Run Code Online (Sandbox Code Playgroud)
有超过5000万行和240种可能的"类型".我想建立一个枢轴,每个id都有一行,每个type都是它自己的列:
id 1a 1b 1c 2a
aaa 10 20 7
bbb 5 10
Run Code Online (Sandbox Code Playgroud)
我可以在SQL服务器中执行此操作,但我不知道如何在Teradata中执行此操作.制作CASE语句的列数太多了.但是,每个不同的type都在表字段中,如果有任何帮助的话.
如何计算前7天的数据(上周的周日至周六).在一周的任何一天运行它应该总是给上周的周日 - 周六.谢谢
我正在寻找类似于ISNUMERIC()T-SQL和Teradata SQL的功能.如果字符类型字段中包含的数据都是数字,我想要一个返回布尔值(或数字1/0)的简单方法.
例如:
我的专栏包含以下记录:'001'和'ABC'
我希望查询返回:1(或True)和0(或False).
是否存在类似于ISNUMERIC()TD原生支持的方法?我找到了一些我可以使用的正则表达式的选项,但是想在查看这条路径之前是否有更简单的方法.如果不存在这样的方法,我愿意接受有关完成此方法的建议.
我需要清理一个字符列,为此我正在Teradata 14中使用REGEXP_REPLACE函数。
相同的代码可用于其他数据源(具有相同的LATIN编码)。
使用show table的数据定义给了我以下数据格式:
CREATE SET TABLE pp_oap_cj_t.dc_loss_fdr_kn ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO
( PARENT_ID DECIMAL(38,0),
FS_MRCH_NM VARCHAR(25) CHARACTER SET LATIN NOT CASESPECIFIC
) PRIMARY INDEX ( PARENT_ID );
Run Code Online (Sandbox Code Playgroud)
我正在执行的查询如下:
CREATE TABLE pp_oap_pb_piyush_t.CHECKMERCHANT1 AS (
SELECT
FS_MRCH_NM,
REGEXP_REPLACE(trim(Upper(trim(REGEXP_REPLACE( (FS_MRCH_NM ) , '[^a-z]',' ',1,0,'i'))) ), '[[:space:]]+',' ',1,0,'i') as cleaned_merchant
FROM pp_oap_pb_piyush_t.CHECKMERCHANT)
WITH DATA PRIMARY INDEX (FS_MRCH_NM);
Run Code Online (Sandbox Code Playgroud)
错误
CREATE TABLE Failed. 6706: The string contains an untranslatable character.
Run Code Online (Sandbox Code Playgroud)
我需要快速解决这个瓶颈。
帮助真的很感激!谢谢 …
我试图通过RStudio连接到Teradata,但是由于某种原因,JDBC函数在识别Java驱动程序所在的路径时遇到了问题。请参见下面的代码:
library(RODBC)
library(RJDBC)
library(rJava)
# both Java drivers definitely exist
file.exists('/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar')
[1] TRUE
file.exists('/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar')
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
但是当我将这些路径粘贴到JDBC调用中时...
# allow more elaborated error messages to appear
.jclassLoader()$setDebug(1L)
drv = JDBC("com.teradata.jdbc.TeraDriver","/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar;/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar")
Run Code Online (Sandbox Code Playgroud)
...我收到以下错误:
RJavaClassLoader:将'/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/tdgssconfig.jar;/Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar'添加到URL类路径加载器中警告:路径' / Users / KULMAK / Documents / TeraJDBC__indep_indep.16.10.00.03 / tdgssconfig.jar; /Users/KULMAK/Documents/TeraJDBC__indep_indep.16.10.00.03/terajdbc4.jar'不存在,它将不会添加到内部类路径中!RJavaClassLoader:已添加 将'/Library/Frameworks/R.framework/Versions/3.4/Resources/library/RJDBC/java/RJDBC.jar'到URL类路径加载器RJavaClassLoader:添加Java存档文件'/Library/Frameworks/R.framework/Versions/ 3.4 / Resources / library / RJDBC / java / RJDBC.jar到内部类路径RJavaClassLoader@3d4eac69.findClass(com.teradata.jdbc.TeraDriver)-URL加载器找不到它:java.lang.ClassNotFoundException:com.teradata .jdbc.TeraDriver RJavaClassLoader.findClass(“ com.teradata.jdbc.TeraDriver”)-尝试使用类路径“ /Library/Frameworks/R.framework/Versions/3.4/Resources/library/rJava/java”目录,可以获取'/ Library / Frameworks / R.framework / Versions / 3.4 / Resources / library / rJava / java / com / teradata / …
我正在使用Teradata 16.20.05.01运行以下脚本:
create table t1(v int not null);
create table t2(w int null);
alter table t1 add constraint pk primary key (v);
alter table t2 add constraint t2_fk foreign key (w) references t1 (v);
Run Code Online (Sandbox Code Playgroud)
添加外键后,我突然在架构中得到一个多余的表:
select TableName, RequestText
from "DBC".Tables
where DatabaseName = 'test'
and (TableName like 't1%' or TableName like 't2%')
Run Code Online (Sandbox Code Playgroud)
输出:
TableName |RequestText |
----------|----------------------------------------------------------------------|
t1 |alter table t1 add constraint pk primary key (v) |
t2 |create table t2(w int null) |
T2_0 |alter table t2 add …Run Code Online (Sandbox Code Playgroud)