224 lines
7.7 KiB
Markdown
224 lines
7.7 KiB
Markdown
# MARS-826-PREHOOK: DATA_EXPORTER Package Update - Column Rename Support
|
|
|
|
## Overview
|
|
**Purpose**: Update DATA_EXPORTER package to support renamed column in CT_ODS.A_LOAD_HISTORY
|
|
**Type**: Pre-Hook Deployment (Required before MARS-826)
|
|
**Target Schema**: CT_MRDS
|
|
**Database Objects**: DATA_EXPORTER package body
|
|
|
|
## Background
|
|
|
|
### Issue
|
|
The CT_ODS.A_LOAD_HISTORY table has column `A_ETL_LOAD_SET_KEY` (PRIMARY KEY), but the DATA_EXPORTER package had hardcoded references to the old column name `A_WORKFLOW_HISTORY_KEY`, causing JOIN failures.
|
|
|
|
### Root Cause
|
|
Column name mismatch discovered during MARS-826 testing:
|
|
- **Database DDL**: `A_ETL_LOAD_SET_KEY` (correct, as per source definition)
|
|
- **DATA_EXPORTER package**: `L.A_WORKFLOW_HISTORY_KEY` (incorrect, outdated reference)
|
|
- **Impact**: All export procedures failed with `ORA-00904: "L"."A_WORKFLOW_HISTORY_KEY": invalid identifier`
|
|
|
|
### Solution
|
|
Updated DATA_EXPORTER.pkb to use correct column name `A_ETL_LOAD_SET_KEY` in all JOIN operations with CT_ODS.A_LOAD_HISTORY.
|
|
|
|
## Changes Made
|
|
|
|
### Package Version Update
|
|
**Previous Version**: 2.1.0
|
|
**New Version**: 2.1.1
|
|
**Change Type**: PATCH (Bug Fix)
|
|
**Build Date**: 2025-12-04 13:10:00
|
|
|
|
### Modified Files
|
|
1. **DATA_EXPORTER.pkg** (Package Specification)
|
|
- Updated PACKAGE_VERSION: '2.1.0' → '2.1.1'
|
|
- Updated PACKAGE_BUILD_DATE: '2025-12-04 13:10:00'
|
|
- Updated VERSION_HISTORY with v2.1.1 entry
|
|
|
|
2. **DATA_EXPORTER.pkb** (Package Body)
|
|
- Updated 4 JOIN clauses in dynamic SQL
|
|
- Updated example in documentation comment
|
|
|
|
### Specific Changes
|
|
|
|
**Location 1**: Line ~326 (EXPORT_TABLE_DATA_BY_DATE - partition query)
|
|
```sql
|
|
-- BEFORE:
|
|
WHERE T.' || ... || ' = L.A_WORKFLOW_HISTORY_KEY
|
|
|
|
-- AFTER:
|
|
WHERE T.' || ... || ' = L.A_ETL_LOAD_SET_KEY
|
|
```
|
|
|
|
**Location 2**: Line ~340 (EXPORT_TABLE_DATA_BY_DATE - export query)
|
|
```sql
|
|
-- BEFORE:
|
|
WHERE T.' || ... || ' = L.A_WORKFLOW_HISTORY_KEY
|
|
|
|
-- AFTER:
|
|
WHERE T.' || ... || ' = L.A_ETL_LOAD_SET_KEY
|
|
```
|
|
|
|
**Location 3**: Line ~613 (EXPORT_TABLE_DATA_TO_CSV_BY_DATE - partition query)
|
|
```sql
|
|
-- BEFORE:
|
|
WHERE T.' || ... || ' = L.A_WORKFLOW_HISTORY_KEY
|
|
|
|
-- AFTER:
|
|
WHERE T.' || ... || ' = L.A_ETL_LOAD_SET_KEY
|
|
```
|
|
|
|
**Location 4**: Line ~629 (EXPORT_TABLE_DATA_TO_CSV_BY_DATE - export query)
|
|
```sql
|
|
-- BEFORE:
|
|
WHERE T.' || ... || ' = L.A_WORKFLOW_HISTORY_KEY
|
|
|
|
-- AFTER:
|
|
WHERE T.' || ... || ' = L.A_ETL_LOAD_SET_KEY
|
|
```
|
|
|
|
**Location 5**: Line ~398 (Documentation example)
|
|
```sql
|
|
-- BEFORE:
|
|
pKeyColumnName => 'A_WORKFLOW_HISTORY_KEY',
|
|
|
|
-- AFTER:
|
|
pKeyColumnName => 'A_ETL_LOAD_SET_KEY_FK',
|
|
```
|
|
|
|
## Deployment
|
|
|
|
### Prerequisites
|
|
- Database connection: CT_MRDS schema
|
|
- Required privileges: ALTER PACKAGE on CT_MRDS.DATA_EXPORTER
|
|
- Estimated time: 1-2 minutes
|
|
|
|
### Installation Steps
|
|
|
|
The master installation script performs these operations in sequence:
|
|
|
|
1. **Deploy Package Specification** - Install updated DATA_EXPORTER.pkg from new_version/ (v2.1.1)
|
|
2. **Deploy Package Body** - Install updated DATA_EXPORTER.pkb from new_version/ with column reference fixes
|
|
3. **Track Version** - Record package version using universal tracking script (Standard)
|
|
4. **Verify Status** - Check all tracked packages for untracked changes using universal verification script (Standard)
|
|
|
|
**Version Folders:**
|
|
- **current_version/** - Contains DATA_EXPORTER v2.1.0 (backup from MARS-846 for rollback)
|
|
- **new_version/** - Contains DATA_EXPORTER v2.1.1 (updated with A_ETL_LOAD_SET_KEY fixes)
|
|
|
|
### Execution
|
|
1. Connect to database as CT_MRDS user
|
|
2. Execute `install_mars826_prehook.sql`
|
|
3. Verify package compilation status
|
|
4. Test export functionality
|
|
|
|
### Verification
|
|
```sql
|
|
-- Check package compilation status
|
|
SELECT object_name, object_type, status
|
|
FROM user_objects
|
|
WHERE object_name = 'DATA_EXPORTER'
|
|
AND object_type = 'PACKAGE BODY';
|
|
|
|
-- Verify package version
|
|
SELECT CT_MRDS.DATA_EXPORTER.GET_VERSION() FROM DUAL;
|
|
|
|
-- Test export with new column reference
|
|
BEGIN
|
|
CT_MRDS.DATA_EXPORTER.EXPORT_TABLE_DATA_BY_DATE(
|
|
pSchemaName => 'OU_LM',
|
|
pTableName => 'ADHOC_ADJ_HEADER',
|
|
pKeyColumnName => 'A_ETL_LOAD_SET_KEY_FK',
|
|
pBucketArea => 'ARCHIVE',
|
|
pFolderName => 'TEST_EXPORT'
|
|
);
|
|
END;
|
|
/
|
|
```
|
|
|
|
### Rollback
|
|
Execute `rollback_mars826_prehook.sql` to restore previous package version.
|
|
|
|
## Dependencies
|
|
|
|
### Required by MARS-826
|
|
**CRITICAL**: This package must be deployed **BEFORE** MARS-826 execution. MARS-826 export scripts depend on this updated DATA_EXPORTER package.
|
|
|
|
### Database Objects
|
|
- **Table**: CT_ODS.A_LOAD_HISTORY (must have column A_ETL_LOAD_SET_KEY)
|
|
- **Package**: CT_MRDS.ENV_MANAGER (for error handling and logging)
|
|
- **Package**: CT_MRDS.FILE_MANAGER (for bucket URI resolution)
|
|
|
|
## Configuration Changes
|
|
|
|
### Bucket Configuration
|
|
**Note**: During testing, discovered bucket configuration issue:
|
|
- Original: `ArchiveBucketName = 'archive'` (bucket did not exist)
|
|
- Fixed: `ArchiveBucketName = 'history'` (correct bucket name)
|
|
|
|
This configuration fix is **NOT** part of this MARS package but was applied directly to database:
|
|
```sql
|
|
UPDATE CT_MRDS.A_FILE_MANAGER_CONFIG
|
|
SET CONFIG_VARIABLE_VALUE = 'history'
|
|
WHERE CONFIG_VARIABLE = 'ArchiveBucketName';
|
|
COMMIT;
|
|
```
|
|
|
|
## Testing Results
|
|
|
|
### Test Case 1: Single Table Export
|
|
**Table**: OU_LM.ADHOC_ADJ_HEADER
|
|
**Result**: ✅ SUCCESS
|
|
**Output**: 2 Parquet files created with Hive-style partitioning
|
|
```
|
|
LM_ADHOC_ADJUSTMENTS_HEADER/PARTITION_YEAR=2025/PARTITION_MONTH=08/202508_1_*.parquet (1,433 bytes)
|
|
LM_ADHOC_ADJUSTMENTS_HEADER/PARTITION_YEAR=2025/PARTITION_MONTH=09/202509_1_*.parquet (1,432 bytes)
|
|
```
|
|
|
|
### Test Case 2: Package Compilation
|
|
**Status**: ✅ VALID
|
|
**Compilation Time**: < 1 second
|
|
**Errors**: None
|
|
|
|
## Impact Analysis
|
|
|
|
### Affected Procedures
|
|
1. `EXPORT_TABLE_DATA_BY_DATE` - Main export with Parquet partitioning
|
|
2. `EXPORT_TABLE_DATA_TO_CSV_BY_DATE` - CSV export with date filtering
|
|
|
|
### Tables Using A_ETL_LOAD_SET_KEY_FK
|
|
All tables in MARS-826 export scope (19 tables):
|
|
- OU_LM: 17 tables (ADHOC_ADJ_*, BALANCESHEET_*, CSM_ADJ_*, FORECAST_*, QR_ADJ_*, STANDING_FACILITY*, TTS_*)
|
|
- OU_MRR: 2 tables (IND_CURRENT_ACCOUNT, IND_OVERNIGHT_DEPOSITS)
|
|
|
|
### Backward Compatibility
|
|
⚠️ **BREAKING CHANGE**: This update is NOT backward compatible with databases where A_LOAD_HISTORY still uses `A_WORKFLOW_HISTORY_KEY` column name.
|
|
|
|
## Files Included
|
|
|
|
1. **README.md** - This documentation file
|
|
2. **.gitignore** - Git exclusions (confluence/, log/, test/, mock_data/)
|
|
3. **install_mars826_prehook.sql** - Master installation script with SPOOL logging (5 steps)
|
|
4. **rollback_mars826_prehook.sql** - Master rollback script (2 steps)
|
|
5. **00_MARS_826_PREHOOK_install_DATA_EXPORTER_SPEC.sql** - Deploy updated package specification
|
|
6. **01_MARS_826_PREHOOK_install_DATA_EXPORTER_BODY.sql** - Deploy updated package body
|
|
7. **02_MARS_826_PREHOOK_verify_package.sql** - Verify package compilation and test export
|
|
8. **track_package_versions.sql** - Universal version tracking script (Standard)
|
|
9. **verify_packages_version.sql** - Universal package verification script (Standard)
|
|
10. **91_MARS_826_PREHOOK_rollback_DATA_EXPORTER_BODY.sql** - Restore previous package body
|
|
11. **92_MARS_826_PREHOOK_rollback_DATA_EXPORTER_SPEC.sql** - Restore previous package specification
|
|
12. **current_version/** - Backup of DATA_EXPORTER v2.1.0 (from MARS-846)
|
|
13. **new_version/** - Updated DATA_EXPORTER v2.1.1 (with A_ETL_LOAD_SET_KEY fixes)
|
|
|
|
## Version History
|
|
- **v2.1.1** (2025-12-04): Fixed JOIN column reference A_WORKFLOW_HISTORY_KEY → A_ETL_LOAD_SET_KEY
|
|
- **v2.1.0** (2025-10-22): Added version tracking and PARTITION_YEAR/PARTITION_MONTH support
|
|
- **v2.0.0** (2025-10-01): Separated export functionality from FILE_MANAGER package
|
|
|
|
## Related JIRA Issues
|
|
- **MARS-826**: Export CSDB historical data to HIST bucket (requires this pre-hook)
|
|
|
|
## Author
|
|
Created by: Grzegorz Michalski
|
|
Date: 2025-12-04
|
|
Schema: CT_MRDS
|