是否可以通过Teradata TPT脚本中的环境变量来处理Amazaon S3凭据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了是否可以通过Teradata TPT脚本中的环境变量来处理Amazaon S3凭据相关的知识,希望对你有一定的参考价值。

我正在用S3设置我的terdata TPT脚本,并希望在TPT脚本中使用环境文件变量来获取Amazon S3凭据,而不是硬编码访问密钥,accessId和区域。

有什么想法吗?

DEFINE JOB EXPORT_FROM_TERADATA DESCRIPTION 'Export data from Teradata to Amazon S3' 

( STEP EXPORT_THE_DATA 
        ( APPLY TO OPERATOR 
                ( $FILE_WRITER() ATTR 
                             ( AccessModuleName = 'libs3axsmod.so',Format = 'Delimited' , AccessModuleInitStr = 'S3Bucket=nn-model-sagemaker-test S3Region=eu-west-1 S3Object=tpt/testdata S3SinglePartFile=False S3AccessID=AKIZZZZZZZZZZZZZZU S3AccessKey=kxxxxxxxxxxxxxxxx7' ) 
                 ) 
                 SELECT * FROM OPERATOR ( $EXPORT ATTR ( UserName = @TargetUserName , UserPassword = @TargetUserPassword, TdpId = @TargetTdpId , SelectStmt = 'SELECT TOP 10 * FROM database.table;' ) ); 
         ); 
);

经过硬编码的凭据在TPT脚本中有效,但变量无效。

( AccessModuleName = 'libs3axsmod.so',Format = 'Delimited' ,
 AccessModuleInitStr = 'S3Bucket=@model-test S3Region=S3AXMS3Region S3AccessID=S3AXMS3AccessID S3AccessKey=S3AXMS3AccessKey' ) 
答案

您无法在TPT脚本中访问环境变量,但是可以在命令行上使用-u开关,以使外壳程序将环境变量的值作为TPT脚本变量传递。

tbuild -f scriptfile -u "S3Rgn='$S3AXMS3Region' …"

并且您可以使用字符串串联来创建AccessModuleInitStr

AccessModuleInitStr='S3Bucket='''||@model-test||''' S3Region='''||@S3Rgn||''' … 

[请注意,您可以从凭据文件中获取AccessID和AccessKey,从配置文件中获取Region(只需在Init String中指定相应的S3Profile)。

以上是关于是否可以通过Teradata TPT脚本中的环境变量来处理Amazaon S3凭据的主要内容,如果未能解决你的问题,请参考以下文章

Teradata 5.1:使用代码将表导出到csv / txt / xls

Teradata 中数据计算和导出

teradata建表DDL

EF Core从TPH迁移到TPT

使用 EF Code First 继承 – 每个类型的表 (TPT)

想在python脚本里面source .profile,调用os.system后在当前运行的脚本里环境变量没有变呢?求解决方法。