Powershell和BTEQ工具实现带多组参数和标签的Teradata数据库批量数据导出程序

ops/2025/3/3 19:09:56/

设计一个基于多个带标签SQL模板作为配置文件和多组参数的Powershell代码程序和BTEQ工具,实现根据不同的输入参数,自动批量地将Teradata数据库的数据导出为CSV文件到指定目录上,标签和多个参数(以“_”分割)为组成导出数据文件名,文件已经存在则覆盖原始文件。Powershell程序需要异常处理,输出带时间戳和每个运行批次和每个导出文件作业运行状态的日志文件,每天单独一个带日期的和.log扩展名日志文件,放在logs子目录中,参数全部设置在json配置文件中。

完整解决方案:

注意事项

  1. 确保BTEQ客户端已正确安装并配置环境变量
  2. 数据库密码以明文存储,生产环境建议使用加密方式
  3. SQL模板中的参数占位符必须与参数组数量严格匹配
  4. 建议在测试环境验证SQL模板和参数组合的正确性

文件结构

├── config.json
├── Export-TeradataData.ps1
├── templates/
│   └── sales.sql
├── logs/
│   └── 20231015.log
└── exports/├── SalesReport_2023_Q4.csv└── SalesReport_2023_Q3.csv

config.json

{"database": {"host": "teradata.server.com","username": "myuser","password": "mypassword"},"templates": [{"label": "SalesReport","path": "templates/sales.sql","parameters": [["2023", "Q4"],["2023", "Q3"]]}],"export_directory": "exports","log_directory": "logs"
}

templates/sales.sql

SELECT * FROM Sales
WHERE Year = {{0}}AND Quarter = {{1}};

Export-TeradataData.ps1

<#
.SYNOPSIS
Automated Teradata data export tool using BTEQ.DESCRIPTION
This script executes parameterized SQL templates against Teradata and exports results to CSV files.
#>param([Parameter(Mandatory=$true)][string]$ConfigPath = "config.json"
)# 初始化配置
$config = Get-Content $ConfigPath -Raw | ConvertFrom-Json# 创建必要目录
New-Item -ItemType Directory -Path $config.export_directory -Force | Out-Null
New-Item -ItemType Directory -Path $config.log_directory -Force | Out-Null# 初始化日志
$logDate = Get-Date -Format "yyyyMMdd"
$logFile = Join-Path $config.log_directory "$logDate.log"function Write-Log {param([string]$Message,[string]$Level = "INFO")$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"$logEntry = "[$timestamp][$Level] $Message"Add-Content -Path $logFile -Value $logEntry
}Write-Log "=== Script Start ==="# 主处理逻辑
try {foreach ($template in $config.templates) {$label = $template.label$templatePath = $template.pathtry {$sqlTemplate = Get-Content $templatePath -Raw -ErrorAction StopWrite-Log "Loaded template: $label"} catch {Write-Log "Error loading template [$label]: $_" -Level "ERROR"continue}foreach ($paramGroup in $template.parameters) {$batchId = [guid]::NewGuid().ToString().Substring(0,8)$paramString = $paramGroup -join "_"$exportFile = "${label}_${paramString}.csv"$exportPath = Join-Path $config.export_directory $exportFile# 参数替换$sqlQuery = $sqlTemplatefor ($i=0; $i -lt $paramGroup.Count; $i++) {$sqlQuery = $sqlQuery -replace "\{\{$i\}\}", $paramGroup[$i]}# 生成BTEQ脚本$btqScript = @"
.LOGON $($config.database.host)/$($config.database.username),$($config.database.password)
.set separator ','
.set titledashes off
.set format off
.EXPORT REPORT FILE=$exportPath
;
$sqlQuery
;
.IF ERRORCODE <> 0 THEN .QUIT ERRORCODE
.EXPORT RESET
.LOGOFF
.QUIT 0
"@$btqScriptPath = [System.IO.Path]::GetTempFileName()Set-Content -Path $btqScriptPath -Value $btqScript# 执行导出try {Write-Log "[$batchId] Starting export: $exportFile"if (Test-Path $exportPath) {Remove-Item $exportPath -ForceWrite-Log "[$batchId] Removed existing file: $exportFile"}$output = & bteq < $btqScriptPath 2>&1 | Out-Stringif ($LASTEXITCODE -ne 0) {throw "BTEQ Error ($LASTEXITCODE): $output"}Write-Log "[$batchId] Successfully exported: $exportFile"} catch {Write-Log "[$batchId] Export failed: $_" -Level "ERROR"} finally {Remove-Item $btqScriptPath -ErrorAction SilentlyContinue}}}
} catch {Write-Log "Fatal error: $_" -Level "CRITICAL"
} finally {Write-Log "=== Script End ==="
}

使用说明

  1. 配置文件:按实际环境修改config.json中的数据库连接信息和模板配置
  2. SQL模板:在templates目录中创建.sql文件,使用{{0}}、{{1}}等占位符
  3. 执行脚本
.\Export-TeradataData.ps1 -ConfigPath .\config.json

功能特性

  1. 自动化导出:根据配置文件自动处理所有模板和参数组合
  2. 文件管理:自动覆盖已存在文件,自动创建输出目录
  3. 日志记录
    • 每天生成独立的日志文件(logs/yyyyMMdd.log)
    • 包含详细的时间戳和操作状态
    • 支持多级日志级别(INFO/ERROR/CRITICAL)
  4. 异常处理
    • 模板加载错误
    • BTEQ执行错误
    • 文件操作错误
  5. 参数化配置:支持通过JSON配置灵活管理数据库连接、模板和参数

http://www.ppmy.cn/ops/162841.html

相关文章

Hive基础

1.概述 Hive是一款apache旗下的基于MapReduce的分布式SQL计算工具&#xff0c;其功能是&#xff1a; 将SQL语句翻译成MapReduce程序运行 Hive组件 元数据管理(Matastore服务)SQL解析器(Driver驱动程序)用户接口 2.Hive在VMware虚拟机中部署 hive是单机运行的&#xff0c;…

8.Dashboard的导入导出

分享自己的Dashboard 1. 在Dashboard settings中选择 JSON Model 2. 导入 后续请参考第三篇导入光放Dashboard&#xff0c;相近

Redis的持久化-RDBAOF

文章目录 一、 RDB1. 触发机制2. 流程说明3. RDB 文件的处理4. RDB 的优缺点 二、AOF1. 使用 AOF2. 命令写⼊3. 文件同步4. 重写机制5 启动时数据恢复 一、 RDB RDB 持久化是把当前进程数据生成快照保存到硬盘的过程&#xff0c;触发 RDB 持久化过程分为手动触发和自动触发。 …

CSS 系列之:基础知识

块级元素和内联元素 块级元素行内元素块级元素是指在页面上以块的形式显示的元素内联元素&#xff08;又称行内元素&#xff09;以行的形式显示它们会独占一行&#xff0c;并且默认情况下会占满其父元素的宽度不独占一行<div>、<p>、<h1>至<h6>、<…

【网络】TCP vs UDP详解( 含python代码实现)

【网络】TCP vs UDP详解 1. 基本概念2. 主要特性对比3. 工作原理TCP 的工作原理UDP 的工作原理 4. 优缺点对比5. 适用场景6. 代码示例TCP 服务器TCP 客户端UDP 服务器UDP 客户端 7. 总结 TCP&#xff08;传输控制协议&#xff09;和 UDP&#xff08;用户数据报协议&#xff09;…

系统架构设计师—计算机基础篇—计算机网络

文章目录 网络互联模型网络协议与标准应用层协议FTP协议TFTP协议 HTTP协议HTTPS协议 DHCP动态主机配置协议DNS协议迭代查询递归查询 传输层协议网络层协议IPV4协议IPV6协议IPV6数据报的目的地址IPV4到IPV6的过渡技术 网络设计分层设计接入层汇聚层核心层 网络布线综合布线系统工…

leetcode206-----反转链表

目录 一、题目介绍 二、解题思路 2.1 头插法【建议链表有虚拟头节点】 2.1.1 思路 2.1.2 代码 时间复杂度分析&#xff1a; 空间复杂度分析&#xff1a; 总结&#xff1a; 2.2 改变链表 next 指针的指向【不建议链表有虚拟头节点】 2.2.1 双指针法【不建议链表有虚拟…

Spring源码分析の配置类解析

文章目录 前言一、processConfigBeanDefinitions1.1、checkConfigurationClassCandidate1.2、parse1.2.1、处理配置类标记了Component 的情况1.2.2、处理 ComponentScan 注解 总结 前言 在Spring的注解模式中&#xff0c;通常在构造AnnotationConfigApplicationContext时需要传…