4

谁能解释 Teradata 中的查询带?我已经对此进行了很多搜索,但无法获得我能理解的信息。请详细一点。

谢谢!!!

4

5 回答 5

7

TeraDATA 中的查询条带:

Query Banding 提供了间接的工作流程信息。

概念:

科学家们经常会用设备将鸟类的腿绑起来,以跟踪它们的飞行路径。监测和分析通过波段检索到的数据可提供有关该物种的关键信息。

DBA 遵循相同的过程,他们需要更多关于查询的信息而不是可用信息。

元数据——例如请求用户的名称、工作单位和应用程序名称很重要,工作负载管理将跟踪数据仓库的整个使用和查询故障排除。查询绑定功能的使用方式是,这些元数据详细信息链接到数据库中的查询。

查询带可以包含任意数量的名称或值对,例如启动用户的公司 ID、部门和位置,以及启动执行开始的时间。

于 2012-12-24T10:41:58.907 回答
2

Prashanth 提供了一个很好的类比鸟类和乐队。亚当要求的是具体情况。当查询条带可能非常有用时,我可以提出几个示例:

  1. 数百名用户通过具有自定义应用程序或报告应用程序(如 Business Objects、Tableau 或 Qlikview)的应用程序服务器使用您的系统。应用程序服务器使用一个用户 ID 连接到 Teradata,但是管理员仍然想知道每个查询是由哪些用户、部门和用户组生成的,以便稍后在 DBQL 中进行分析,或者只是使用 TASM 分配适当的系统资源。为此,可以配置应用程序,使每个查询都与“AppUser:User1;Appgroup:DataScientists;QueryType:strategic02”等信息“捆绑”在一起。尽管 Application Server 使用一个 Teradata 用户和有限数量的连接来路由来自数百个用户的所有查询,每个单独的查询都标有确切的用户发起查询的信息。然后,您可以根据此信息执行各种分析。

  2. 假设您有一个复杂的 ETL 应用程序,并且您想要跟踪和分析您的负载执行——什么和什么时候出错了。通常您需要记录 ETL 流程的所有步骤,并且在日志中您必须指定唯一的加载 ID、流程 ID、步骤 ID 等。您这样做是因为您希望能够了解导致此停止的特定流程或性能下降,如果没有此类日志记录,就无法区分 ETL 应用程序的不同运行之间相同步骤的运行。一个不错的选择是打开 DBQL 并使用带有负载 ID、进程 ID、步骤 ID 等的 Query Band 信息来美化您的查询。这样您就可以在 DBQL 中获得所有必要的信息,而无需创建额外的复杂日志表。

于 2015-02-06T10:29:24.537 回答
1
SET QUERY BAND = 'name=value; name2=value;' FOR SESSION|TRANSACTION;

这将使用一些名称值对标记您的查询。这可用于管理查询的工作负载管理,例如在 TDWM 中,您有节流阀和优先级管理挂钩,它们将优先考虑所有 name2 类型的值为“value”。这意味着您可以提交有关会话或事务的非常丰富的详细信息

于 2013-01-05T11:13:01.877 回答
0

是的,您所描述的可以使用 QueryBanding 轻松完成;将其视为“传输中的密钥对属性的货车”。例如,您可以通过 sql 或使用 bteq 或 jdbc 中的会话属性以语法方式访问它们。

于 2016-02-05T02:18:57.670 回答
0

Necromancing...现有的答案很好地解释了查询带的工作原理,但由于我找不到完整的工作示例,我想在这里添加一个。

已经介绍了在 Teradata 中设置查询范围,因此我将提供一个示例来说明如何从 .NET 客户端设置它们:

private void SetQueryBands()
{
     TdQueryBand qb = Connection.QueryBand;
     qb["CustomApplicationName"] = "MyAppName";
     foreach (string key in CustomQueryBands.Keys)
     {
         qb[key] = CustomQueryBands[key];
     }

     Connection.ChangeQueryBand(qb);
} 

Connection = new TdConnection(GetConnectionString());
Connection.Open();
SetQueryBands();

更多细节可以在这里找到。

要检索存储的查询带数据,可以使用GetQueryBandValue函数:

SELECT CollectTimestamp, QueryBand,
   GetQuerybandValue(queryband, 0, 'Key1') AS Value1, 
   GetQuerybandValue(queryband, 0, 'Key2') AS Value2, 
   GetQuerybandValue(queryband, 0, 'Key3') AS Value3, 
FROM dbql_data.dbqlogtbl
WHERE dateofday = DATE - 1
   AND queryband LIKE '%somekeyorvalue%'
于 2017-12-22T09:45:31.347 回答