标签: teradata

Teradata:如何设计要使用许多外键列进行规范化的表?

我正在 Teradata 中设计一个大约有 30 列的表。这些列将需要存储多个时间间隔样式的值,例如 Daily、Monthly、Weekly 等。将实际字符串值存储在表中是一种糟糕的设计,因为这会导致严重的数据重复。相反,我想做的是创建一个原始查找表。该表将保存 Daily、Monthly、Weekly,并将使用 Teradata 的标识列来派生主键。这个主键然后将存储在我创建的表中作为外键。

该表将设计如下:

ID 类型值
--- ------------ ------------
每天 1 次间隔
2 间隔每月
3 间隔每周
4 时间帧 24x7
5 时间帧 8x5

这对我的应用程序很有效,因为我需要知道的只是填充 Web 表单下拉列表时的原始键值。但是,我们使用的其他应用程序需要运行报告或通过提要接收这些数据。因此,需要创建一个视图,将这个表连接到基元表,以便它可以实际返回 Daily、Monthly 和 Weekly。

我关心的是性能。

我从未创建过包含如此大量外键字段的表,并且对 Teradata 还相当陌生。在我走上漫长的道路以艰难的方式弄清楚这一切之前,我希望获得任何建议,以实现我的目标的最佳方式。

performance foreign-key primary-key teradata

5
推荐指数
1
解决办法
1685
查看次数

Teradata 15:失败 [5315 : HY000] 用户引用的所有者没有对 DBC.RoleMembersV.RoleName 的 SELECT WITH GRANT OPTION 访问权限

我正在使用 Teradata 15。使用强大的数据库用户 sysdba,我创建了以下视图:

REPLACE VIEW DBA_TABLES_TEST.ROLE_ALL_APP_USERS AS
SELECT   A.ROLENAME 
   FROM  DBC.ROLEMEMBERSV A
   WHERE A.ROLENAME LIKE 'TG%';
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Executed as Single statement.  Failed [5315 : HY000] An owner referenced by user does not have SELECT WITH GRANT OPTION access to DBC.RoleMembersV.RoleName. 
Elapsed time = 00:00:00.015 

STATEMENT 1: Select Statement failed. 
Run Code Online (Sandbox Code Playgroud)

然后我使用 DBC 授予 sysdba 选择权,但再次尝试查看,它不起作用:

GRANT SELECT ON DBC TO SYSDBA WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

知道如何向 sysdba 授予正确的权限吗?

非常感谢!

permissions teradata

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

Teradata:选择无锁定表

据我了解,从 Teradata 中的表中选择时,该表默认处于锁定状态。我想做一个简单的select * from table不锁定表。意思是,我想做一个选择并允许其他用户从同一个表中进行选择,而不必等待我的选择结束。

我知道我可以使用LOCKING修饰符降级选择锁,如下所示:

locking table my_table for access select * from my_table
Run Code Online (Sandbox Code Playgroud)

但这将允许我的操作不等待锁定。据我了解,它仍然会锁定表,因此其他操作将不得不等待锁定。

locking teradata

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

Teradata 数据库无法增加永久空间中的数据库大小

任何有teradata数据库经验的人?我是这个数据库的新手,我的任务是增加数据库的大小。我正在使用 Teradata Administrator 来执行此操作。我正在使用Tools > Modify Database然后增加 Perm 空间的大小。

尝试修改数据库以增加大小时,我收到以下错误消息:

3541: The request to assign new PERMANENT space is invalid
Run Code Online (Sandbox Code Playgroud)

到目前为止,我的理解是关键是在 DBC 中有足够的空间。我使用的数据库是父 (DBC) 的子数据库。

我可以从运行查询中看到,由于 DBC 足够大,我应该有足够的大小来增加我的数据库。

例子:

select sum(currentperm) c1, sum (maxperm) c2, c2-c1 from dbc.diskspace;
Run Code Online (Sandbox Code Playgroud)

结果:

currentperm         maxperm                 c2-c1
293,696,239,616.00  2,382,684,039,413.76    2,088,987,799,797.76
273.525938          2219.047434             1945.521496
Run Code Online (Sandbox Code Playgroud)

这告诉我 DBC 中有 1.9TB 可用空间。我读对了吗?我有足够的空间。那么为什么我不能增加我的数据库呢?

teradata

0
推荐指数
1
解决办法
3158
查看次数