任何人都可以解释Teradata中的查询频段吗? 我已经对此进行了很多搜索,但却无法获得我能理解的信息。 请稍微详细一点。
感谢!!!
答案 0 :(得分:7)
在TERADATA中查询:
QUERY BANDING提供了环境工作流程信息。
<强>概念强>
科学家们经常会用鸟类的方式将鸟类的腿绑在一起,以追踪他们的飞行路径。监测和分析通过波段检索的数据可提供有关物种的重要信息。
相同的过程之后是需要更多有关查询的信息的DBA,而不是可用的信息。
元数据 - 例如请求用户,工作单位和工作单位的名称。应用程序名称很重要,Workload管理将跟踪数据仓库的整个使用情况。查询疑难解答 查询条带功能的使用方式是,这些元数据详细信息链接到数据库中的查询。
查询带可以包含任意数量的名称或值对,例如启动用户公司ID,部门和部门。 location,也是启动执行开始的时间。
答案 1 :(得分:2)
Prashanth提供了与鸟类和乐队的良好比喻。亚当要求具体情况。我可以提出几个例子,当查询条带可能非常有用时:
数百名用户通过具有自定义应用程序或Business Objects,Tableau或Qlikview等报表应用程序的Application Server使用您的系统。应用程序服务器使用一个用户ID连接到Teradata,但是管理员仍然想知道哪些用户,部门和用户组生成每个查询以便以后能够在DBQL中进行分析,或者只是使用TASM分配适当的系统资源。为此,可以以这样的方式配置应用程序:每个查询都被绑定&#34;使用&#34; AppUser:User1; Appgroup:DataScientists; QueryType:strategic02&#34;等信息。尽管Application Server使用一个Teradata用户和有限数量的连接来路由来自数百个用户的所有查询,但每个单独的查询都标记有用户已启动查询的确切信息。然后,您可以根据此信息执行各种分析。
假设您有一个复杂的ETL应用程序,并且您希望跟踪和分析您的负载执行情况 - 什么时候出错。通常您需要记录ETL过程的所有步骤,并且在日志中必须指定唯一的加载ID,进程ID,步骤ID等。您这样做是因为您希望能够了解导致此停止的特定过程或者性能下降,如果没有这样的日志记录,就无法区分ETL应用程序的不同运行之间相同步骤的运行。一个很好的选择是打开DBQL并使用带有加载ID,进程ID,步骤ID等的查询带信息来修饰您的查询。这样,您就可以在DBQL中获得所有必要的信息,而无需创建其他精心设计的日志表。
答案 2 :(得分:1)
SET QUERY BAND = 'name=value; name2=value;' FOR SESSION|TRANSACTION;
这将使用一些名称值对标记您的查询。这可用于管理查询的工作负载管理,例如在TDWM中,您有限制和优先级管理挂钩,优先级为所有name2类型,值为&#34; value&#34;。这意味着您可以在会话或交易中提交非常丰富的详细信息
答案 3 :(得分:0)
是的,您所描述的内容可以通过QueryBanding轻松完成;把它想象成运输过程中钥匙对属性的货车&#34;。您可以通过sql或prgrammatically访问它们,例如bteq或jdbc中的会话属性。
答案 4 :(得分: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();
可以找到更多详细信息here。
要检索存储的查询带数据,可以使用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%'