标签: teradata

您能为Teradata最佳实践推荐一个好的来源吗?

看起来我的数据仓库项目明年将转向Teradata(来自SQL Server 2005).

我正在寻找有关Teradata最佳实践的资源 - 从SQL方言的限制到习惯用法以及使查询表现良好的惯例 - 特别是如果它们突出显示与SQL Server 2005明显不同的内容.特别提示类似于SQL的艺术(更注重Oracle).

我的业务流程目前在T-SQL存储过程中,并且非常依赖SQL Server 2005的功能,如PIVOT,UNPIVOT和Common Table Expressions,每月从4TB数据仓库生成大约2700行的输出.

sql data-warehouse teradata

9
推荐指数
3
解决办法
8731
查看次数

teradata sql将多次出现转移到其他列中

我有这样的事情:

ID      Result
1       value1
2       value1
2       value2
3       value1
4       value1
4       value2
4       value3
Run Code Online (Sandbox Code Playgroud)

我想回复这样的事情:

ID      Result1      Result2      Result3
1       value1
2       value1       value2
3       value1
4       value1       value2       value3
Run Code Online (Sandbox Code Playgroud)

我搜索了枢轴和连续点和断点,我找不到一个简单明智的解决方案.

TIA

sql pivot teradata

9
推荐指数
1
解决办法
1万
查看次数

使用Scala/Spark提取Teradata表后出现NullPointerException

我需要从Teradata(只读访问)中提取一个表到Scala(2.11)/ Spark(2.1.0).我正在构建一个可以成功加载的数据框

val df = spark.read.format("jdbc").options(options).load()
Run Code Online (Sandbox Code Playgroud)

但是df.show给了我一个NullPointerException:

java.lang.NullPointerException
at org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter.write(UnsafeRowWriter.java:210)
Run Code Online (Sandbox Code Playgroud)

我做了一个df.printSchema,我发现这个NPE的原因是数据集包含列的null(nullable = false)(看起来Teradata给我错误的信息).实际上,df.show如果我删除有问题的列,我可以实现.

所以,我尝试指定一个新架构,所有列都设置为(nullable = true):

val new_schema = StructType(df.schema.map {
  case StructField(n,d,nu,m) => StructField(n,d,true,m)
})

val new_df = spark.read.format("jdbc").schema(new_schema).options(options).load()
Run Code Online (Sandbox Code Playgroud)

但后来我得到了:

org.apache.spark.sql.AnalysisException: JDBC does not allow user-specified schemas.;
Run Code Online (Sandbox Code Playgroud)

我还尝试从前一个创建一个新的Dataframe,指定所需的模式:

val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema)
Run Code Online (Sandbox Code Playgroud)

但是在对数据帧采取行动时我仍然有一个NPE.

关于如何解决这个问题的任何想法?

scala teradata dataframe apache-spark apache-spark-sql

9
推荐指数
1
解决办法
999
查看次数

MAX()和MAX()OVER PARTITION BY在Teradata Query中产生错误3504

我正在尝试生成一个结果表,其中包含每个课程代码的最后完成课程日期,以及每位员工最后完成的课程代码.以下是我的查询:

SELECT employee_number,
       MAX(course_completion_date) 
           OVER (PARTITION BY course_code) AS max_course_date,
       MAX(course_completion_date) AS max_date
FROM employee_course_completion
WHERE course_code IN ('M910303', 'M91301R', 'M91301P')
GROUP BY employee_number
Run Code Online (Sandbox Code Playgroud)

此查询产生以下错误:

3504 : Selected non-aggregate values must be part of the associated group
Run Code Online (Sandbox Code Playgroud)

如果我删除MAX()OVER(PARTITION BY ...)行,查询执行得很好,所以我已经将问题隔离到该行,但在搜索这些论坛和互联网后,我看不到我的意思我做错了.有人可以帮忙吗?

sql aggregate-functions teradata database-partitioning

8
推荐指数
2
解决办法
10万
查看次数

在Teradata中检索列和其他元数据信息

我在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参考资料; 我遇到的一切似乎都是广告而不是实用信息.

sql teradata

8
推荐指数
1
解决办法
3万
查看次数

Teradata更新连接语法

我已经尝试了一些我在互联网上看过的例子,但我似乎无法弄明白.这是Teradata数据库.

我有TableA,它有CustomerId和DepartmentId.

我有TableB,也是CustomerId和DepartmentId.

我知道这种结构不实用,但这是一个高度非标准化的数据库,我们从离岸开发团队接管,我们必须使用我们拥有的.

我想要做的是在CustomerId上连接TableA和TableB,然后将TableB的DepartmentId设置为TableA中的内容.我非常感谢正确的语法.

sql join teradata

8
推荐指数
1
解决办法
2万
查看次数

hadoop vs teradata有什么区别

我触及了Teradata.我从未接触过hadoop,但从昨天开始,我正在研究这个问题.通过对两者的描述,它们似乎是可以互换的,但在一些文章中写道它们用于不同的目的.但我发现的一切都是模糊的.我很迷惑.

有谁有经验吗?他们之间有什么严重的区别?

简单示例:我想构建ETL,它将转换数十亿行原始数据并将它们组织成DWH.然后对它们进行一些资源昂贵的分析.为何使用TD?为何选择Hadoop?或者为什么不呢?

database hadoop teradata business-intelligence

8
推荐指数
2
解决办法
3万
查看次数

在Teradata中使用COLLECT STATISTICS

在Teradata我可以使用像...这样的声明

collect statistics on my_table column(col1)
Run Code Online (Sandbox Code Playgroud)

这将收集表上的统计信息并将它们存储在DBC视图中,如ColumnStats,IndexStats和MultiColumnStats.我也认为优化器(解析引擎)会在可用时找到统计信息,并使用它们而不是估计的基数/索引值计数来更好地决定如何执行查询.

这听起来很棒,但我有一些问题.

  • 使用有什么不利之处collect stats吗?
  • 何时在SQL脚本中使用收集统计信息是否合适/不合适?
  • 收集已编入索引的字段的统计信息的性能优势是什么?
  • 统计信息存储多长时间(表,易失性表)?
  • 任何其他评论collect statistics将不胜感激.

sql database query-optimization teradata

8
推荐指数
1
解决办法
3万
查看次数

SQL连接多行

我正在使用Teradata,我有一张这样的桌子

ID       String
123      Jim
123      John
123      Jane
321      Jill
321      Janine
321      Johan
Run Code Online (Sandbox Code Playgroud)

我想查询表,所以我得到了

ID       String
123      Jim, John, Jane
321      Jill, Janine, Johan
Run Code Online (Sandbox Code Playgroud)

我试过分区,但可以有很多名字.我如何得到这个结果.甚至,指出我正确的方向将是伟大的.

concat teradata partition

8
推荐指数
2
解决办法
1万
查看次数

如何使用DataFrame和JDBC连接提高慢速Spark作业的性能?

我试图在单个节点(local [*])上以独立模式通过JDBC访问中型Teradata表(约1亿行).

我正在使用Spark 1.4.1.并且设置在一个非常强大的机器上(2个CPU,24个内核,126G RAM).

我已经尝试了几种内存设置和调整选项,以使其更快地工作,但它们都没有产生巨大的影响.

我确信有一些我缺少的东西,下面是我的最后一次尝试,花了大约11分钟来获得这个简单的计数与使用JDBC连接通过R只需要40秒来获得计数.

bin/pyspark --driver-memory 40g --executor-memory 40g

df = sqlContext.read.jdbc("jdbc:teradata://......)
df.count()
Run Code Online (Sandbox Code Playgroud)

当我尝试使用BIG表(5B记录)时,在完成查询后没有返回任何结果.

teradata apache-spark pyspark spark-dataframe

8
推荐指数
2
解决办法
1万
查看次数