Skip to content

Latest commit

ย 

History

History
408 lines (356 loc) ยท 18.3 KB

README.md

File metadata and controls

408 lines (356 loc) ยท 18.3 KB

RIMS Decommission โ€” ไผไธš็บงๅคš็ณป็ปŸๆ•ฐๆฎๅฝ’ๆกฃไธŽ็”Ÿๅ‘ฝๅ‘จๆœŸ็ฎก็†ๅนณๅฐ

Data Archive Lifecycle System โ€” ๅฝ“ไผไธšๅบ”็”จ้€€ๅฝนใ€ๆœๅŠกๅ™จ้”€ๆฏๆ—ถ๏ผŒ้€š่ฟ‡ๆน–ไป“ไธ€ไฝ“ๆžถๆž„ๅฎž็Žฐๅผ‚ๆž„ๆ•ฐๆฎ็š„ 1:1 ๅŽŸๆ ทๅฝ’ๆกฃใ€ๅฎ‰ๅ…จๆŸฅ่ฏขไธŽ็‰ฉ็†้”€ๆฏใ€‚

๐Ÿ“‹ ้กน็›ฎๅฎšไฝ

RIMS Decommission ่งฃๅ†ณ็š„ๆ ธๅฟƒ้—ฎ้ข˜๏ผš

้—ฎ้ข˜ ่งฃๅ†ณๆ–นๆกˆ
ๆ—ง็ณป็ปŸ๏ผˆERP/CRM/OAโ€ฆ๏ผ‰ไธ‹็บฟ๏ผŒๆœๅŠกๅ™จๅณๅฐ†้”€ๆฏ ๅ…จ้‡ๆ•ฐๆฎ่‡ชๅŠจๆŠฝๅ–๏ผŒ1:1 ๅŽŸๆ ทๅ…ฅๆน–ๅฝ’ๆกฃ
ๅކๅฒๆ•ฐๆฎ้œ€่ฆ้•ฟๆœŸไฟๅญ˜๏ผŒๆปก่ถณๅˆ่ง„ๅฎก่ฎก Iceberg ๆ ผๅผๅฝ’ๆกฃ่‡ณ Azure ADLS Gen2๏ผŒๆ”ฏๆŒๆ—ถ้—ดๆ—…่กŒ
ๅฝ’ๆกฃๆ•ฐๆฎ้œ€่ฆๅฎ‰ๅ…จๆŸฅ่ฏข๏ผŒไธ่ƒฝ่ฃธๆšด้œฒ Unity Catalog ็ปŸไธ€ๆฒป็† + Column Mask ๅญ—ๆฎต็บง่„ฑๆ•
ไธๅŒ้€€ๅฝน็ณป็ปŸ็š„ๆŸฅ่ฏข้กต้ขๆ— ๆณ•้€ไธ€ๅผ€ๅ‘ Schema Registry ้ฉฑๅŠจ็š„ๅŠจๆ€้…็ฝฎๅŒ–ๅ‰็ซฏ
ๆ•ฐๆฎๅˆฐๆœŸๅŽ้œ€่ฆ็‰ฉ็†้”€ๆฏ ่‡ชๅŠจๅŒ– DROP + VACUUM ็‰ฉ็†ๅ›žๆ”ถ

๐Ÿ—๏ธ ๆ ธๅฟƒๆžถๆž„้€‰ๅž‹๏ผšๆน–ไป“ไธ€ไฝ“ (Lakehouse)

็ณป็ปŸ้‡‡็”จ Databricks ่ฏปๅ†™ไธ€ไฝ“ + ๆน–ไป“ไธ€ไฝ“ (Iceberg / ADLS Gen2) + Unity Catalog ๆฒป็† + ้…็ฝฎๅŒ–ๅŠจๆ€ๅ‰็ซฏ ๆžถๆž„๏ผš

                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                          โ”‚         Frontend (Vue 3 + Element Plus)   โ”‚
                          โ”‚                                           โ”‚
                          โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
                          โ”‚  โ”‚ RBAC ็ฎก็†โ”‚ โ”‚ ็ณป็ปŸ้…็ฝฎ โ”‚ โ”‚ ๅŠจๆ€ๆŸฅ่ฏข  โ”‚ โ”‚
                          โ”‚  โ”‚ (้™ๆ€้กต) โ”‚ โ”‚ (ๅ‘ๅฏผๅผ) โ”‚ โ”‚ (Schema   โ”‚ โ”‚
                          โ”‚  โ”‚          โ”‚ โ”‚          โ”‚ โ”‚  ้ฉฑๅŠจๆธฒๆŸ“)โ”‚ โ”‚
                          โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
                          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                                            โ”‚ REST API / JSON
                          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                          โ”‚       Backend (Java Spring Boot 3)        โ”‚
                          โ”‚                                           โ”‚
                          โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
                          โ”‚  โ”‚ Auth + โ”‚ โ”‚ Meta   โ”‚ โ”‚ Sync   โ”‚       โ”‚
                          โ”‚  โ”‚ RBAC   โ”‚ โ”‚ Config โ”‚ โ”‚ Orch.  โ”‚       โ”‚
                          โ”‚  โ”‚ Module โ”‚ โ”‚ Module โ”‚ โ”‚ Module โ”‚       โ”‚
                          โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
                          โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”       โ”‚
                          โ”‚  โ”‚ Query  โ”‚ โ”‚ SAS    โ”‚ โ”‚ Life-  โ”‚       โ”‚
                          โ”‚  โ”‚ Proxy  โ”‚ โ”‚ Token  โ”‚ โ”‚ cycle  โ”‚       โ”‚
                          โ”‚  โ”‚ Module โ”‚ โ”‚ Module โ”‚ โ”‚ Module โ”‚       โ”‚
                          โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜       โ”‚
                          โ””โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                             โ”‚      โ”‚      โ”‚      โ”‚      โ”‚
                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜      โ”‚      โ”‚      โ”‚      โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ–ผ                   โ–ผ      โ–ผ      โ–ผ                   โ–ผ
    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
    โ”‚  MySQL 8.0    โ”‚   โ”‚ Redis โ”‚ โ”‚  Databricks        โ”‚ โ”‚  Azure Storage   โ”‚
    โ”‚  (ๅ…ƒๆ•ฐๆฎๅบ“)   โ”‚   โ”‚       โ”‚ โ”‚                    โ”‚ โ”‚                  โ”‚
    โ”‚               โ”‚   โ”‚       โ”‚ โ”‚  โ€ข Jobs (ETLๅ†™ๅ…ฅ)  โ”‚ โ”‚  ADLS Gen2       โ”‚
    โ”‚  โ€ข ็ณป็ปŸ้…็ฝฎ   โ”‚   โ”‚ Token โ”‚ โ”‚  โ€ข SQL Serverless  โ”‚ โ”‚  (Iceberg/Delta) โ”‚
    โ”‚  โ€ข Schema Reg โ”‚   โ”‚ Cache โ”‚ โ”‚    (็ปŸไธ€ๆŸฅ่ฏขๅผ•ๆ“Ž)  โ”‚ โ”‚                  โ”‚
    โ”‚  โ€ข RBAC ๆƒ้™  โ”‚   โ”‚       โ”‚ โ”‚  โ€ข Unity Catalog   โ”‚ โ”‚  Azure Blob      โ”‚
    โ”‚  โ€ข ๅฎก่ฎกๆ—ฅๅฟ—   โ”‚   โ”‚       โ”‚ โ”‚    (่กจๆƒ้™+่„ฑๆ•)   โ”‚ โ”‚  (้ž็ป“ๆž„ๅŒ–้™„ไปถ)  โ”‚
    โ”‚  โ€ข ้”€ๆฏ็ญ–็•ฅ   โ”‚   โ”‚       โ”‚ โ”‚                    โ”‚ โ”‚                  โ”‚
    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆžถๆž„ๆ ธๅฟƒๅ†ณ่ฎฎ

ๅฑ‚ ๆŠ€ๆœฏ้€‰ๅž‹ ่Œ่ดฃ
ๅญ˜ๅ‚จๅฑ‚ Azure ADLS Gen2 + Apache Iceberg ็ป“ๆž„ๅŒ–ๆ•ฐๆฎๅฝ’ๆกฃ๏ผŒๆ”ฏๆŒ ACIDใ€Time Travelใ€Schema Evolution
้™„ไปถๅญ˜ๅ‚จ Azure Blob Storage ้ž็ป“ๆž„ๅŒ–ๆ–‡ไปถ๏ผˆPDF/ๅ›พ็‰‡/ๆ–‡ๆกฃ๏ผ‰๏ผŒ้€š่ฟ‡ SAS ไปค็‰Œๅฎ‰ๅ…จ่ฎฟ้—ฎ
่ฎก็ฎ—ๅผ•ๆ“Ž๏ผˆๅ†™๏ผ‰ Databricks Jobs ETL ๆŠฝๅ–ใ€Compactionใ€ๆ•ฐๆฎ้”€ๆฏไปปๅŠก
ๆŸฅ่ฏขๅผ•ๆ“Ž๏ผˆ่ฏป๏ผ‰ Databricks SQL (Statement Execution API) ๆ‰€ๆœ‰ๅฝ’ๆกฃๆ•ฐๆฎๆŸฅ่ฏข็ปŸไธ€่ตฐ Databricks SQL๏ผŒๅผบๅˆถ UC ้‰ดๆƒ
ๆ•ฐๆฎๆฒป็† Unity Catalog (UC) ่กจ็บงๆƒ้™็ฎกๆŽงใ€COLUMN MASK ๅญ—ๆฎต่„ฑๆ•ใ€ๅ…จๅฑ€ๅฎก่ฎก
ๅ…ƒๆ•ฐๆฎๅบ“ MySQL 8.0 ไป…ๅญ˜้…็ฝฎๅ…ƒๆ•ฐๆฎ๏ผˆ็ณป็ปŸไฟกๆฏใ€Schema Registryใ€้”€ๆฏ็ญ–็•ฅใ€ๅฎก่ฎกๆ—ฅๅฟ—๏ผ‰
ๅŽ็ซฏ API Java 17 + Spring Boot 3 ๅ…ƒๆ•ฐๆฎ็ฎก็†ใ€ๅˆๅง‹ๅŒ–็ผ–ๆŽ’ใ€SAS ็ญพๅ‘ใ€ๆŸฅ่ฏขไปฃ็†
ๅ‰็ซฏ Vue 3 + Element Plus + TypeScript RBAC ็ฎก็†้กต๏ผˆ้™ๆ€๏ผ‰+ ๅŠจๆ€ๆŸฅ่ฏข้กต๏ผˆSchema Registry ้ฉฑๅŠจๆธฒๆŸ“๏ผ‰

๐Ÿงฉ ๆ ธๅฟƒไธšๅŠกๆต็จ‹

  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
  โ”‚ 1.็ณป็ปŸ็™ป่ฎฐโ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚ 2.ๆ•ฐๆฎๅŒๆญฅโ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚ 3.ๅฝ’ๆกฃๆŸฅ่ฏข   โ”‚โ”€โ”€โ”€โ”€โ–ถโ”‚ 4.็”Ÿๅ‘ฝๅ‘จ โ”‚
  โ”‚  & ้…็ฝฎ  โ”‚     โ”‚  & ๅ…ฅๆน–  โ”‚     โ”‚  & ๅฎ‰ๅ…จ่ฎฟ้—ฎ  โ”‚     โ”‚  ๆœŸ้”€ๆฏ  โ”‚
  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Phase 1: ็ณป็ปŸ็™ป่ฎฐไธŽๅˆๅง‹ๅŒ–้…็ฝฎ

็ฎก็†ๅ‘˜็™ปๅฝ•
    โ”‚
    โ”œโ”€โ”€ 1. ๆณจๅ†Œ้€€ๅฝน็ณป็ปŸ๏ผˆๅ็งฐใ€็ผ–็ ใ€้ƒจ้—จใ€่ดŸ่ดฃไบบใ€ไฟ็•™ๅนด้™๏ผ‰
    โ”‚
    โ”œโ”€โ”€ 2. ้…็ฝฎๆบ็ณป็ปŸๆ•ฐๆฎๅบ“่ฟžๆŽฅ
    โ”‚       โ”œโ”€โ”€ DB ็ฑปๅž‹ (MySQL/Oracle/PostgreSQL/SQLServer)
    โ”‚       โ”œโ”€โ”€ ่ฟžๆŽฅไฟกๆฏ (Host/Port/DB/Schema)
    โ”‚       โ”œโ”€โ”€ ๅ‡ญๆฎ โ†’ Azure Key Vault ๅŠ ๅฏ†ๅญ˜ๅ‚จ
    โ”‚       โ””โ”€โ”€ ๆต‹่ฏ•่ฟžๆŽฅ โ†’ ้€š่ฟ‡ๅŽไฟๅญ˜
    โ”‚
    โ”œโ”€โ”€ 3. ้…็ฝฎ็›ฎๆ ‡ๅญ˜ๅ‚จ (ADLS Gen2 / Azure Blob)
    โ”‚       โ”œโ”€โ”€ ๅญ˜ๅ‚จ่ดฆๆˆท + ๅฎนๅ™จ
    โ”‚       โ”œโ”€โ”€ SAS ่ฟžๆŽฅไธฒ โ†’ Key Vault ๅŠ ๅฏ†
    โ”‚       โ””โ”€โ”€ ๆต‹่ฏ•่ฟžๆŽฅ โ†’ ้€š่ฟ‡ๅŽไฟๅญ˜
    โ”‚
    โ””โ”€โ”€ 4. ้…็ฝฎ Schema Registry๏ผˆๆ ธๅฟƒ๏ผ๏ผ‰
            โ”œโ”€โ”€ ่‡ชๅŠจๆŽขๆต‹ๆบ่กจๅˆ—่กจ
            โ”œโ”€โ”€ ไธบๆฏๅผ ่กจ็”Ÿๆˆ Schema ๆ่ฟฐ็ฌฆ (JSON)
            โ”‚       โ”œโ”€โ”€ ๅญ—ๆฎตๅใ€็ฑปๅž‹ใ€ไธป้”ฎ
            โ”‚       โ”œโ”€โ”€ ๆ•ๆ„Ÿๆ ‡่ฎฐ (isPii)
            โ”‚       โ”œโ”€โ”€ ๆ˜พ็คบๅˆซๅ (alias)
            โ”‚       โ”œโ”€โ”€ ๆŸฅ่ฏขๆŽงไปถ็ฑปๅž‹ (equal/range/like/date-range)
            โ”‚       โ””โ”€โ”€ ้™„ไปถๆ ‡่ฎฐ (isAttachment + objectKeyField)
            โ””โ”€โ”€ ไบบๅทฅ็กฎ่ฎค โ†’ ไฟๅญ˜ Schema Registry

Phase 2: ่‡ชๅŠจๅŒ–ๆ•ฐๆฎๅŒๆญฅๅ…ฅๆน–

็ฎก็†ๅ‘˜่งฆๅ‘ๅŒๆญฅ
    โ”‚
    โ”œโ”€โ”€ 1. ๅŽ็ซฏๅˆ›ๅปบ SyncJob ่ฎฐๅฝ• (status=PENDING)
    โ”‚
    โ”œโ”€โ”€ 2. ็ป„่ฃ… Databricks Job ๅ‚ๆ•ฐ
    โ”‚       โ”œโ”€โ”€ ๆบ DB ่ฟžๆŽฅ (ไปŽ Key Vault ่งฃๅฏ†)
    โ”‚       โ”œโ”€โ”€ ็›ฎๆ ‡ ADLS ่ทฏๅพ„
    โ”‚       โ””โ”€โ”€ ่กจๅˆ—่กจ + ๆ ผๅผ (Iceberg)
    โ”‚
    โ”œโ”€โ”€ 3. ้€š่ฟ‡ Databricks Java SDK ๆไบค Notebook Job
    โ”‚       โ”œโ”€โ”€ 1:1 ๅŽŸๆ ทๆŠฝๅ– โ†’ ADLS Gen2 (Iceberg ๆ ผๅผ)
    โ”‚       โ”œโ”€โ”€ ๆณจๅ†Œๅˆฐ Unity Catalog: lake.{system_code}.{table}
    โ”‚       โ””โ”€โ”€ ่‡ชๅŠจ้™„ไปถๅคๅˆถๅˆฐ Azure Blob
    โ”‚
    โ”œโ”€โ”€ 4. ่ฝฎ่ฏขไปปๅŠก็Šถๆ€ โ†’ ่ฎฐๅฝ•ๆ—ฅๅฟ—
    โ”‚
    โ””โ”€โ”€ 5. ๅŒๆญฅๅฎŒๆˆ โ†’ ้…็ฝฎ UC ่กจ็บงๆƒ้™ + Column Mask ่ง„ๅˆ™

Phase 3: ๅ…ƒๆ•ฐๆฎ้ฉฑๅŠจ็š„ๅฎ‰ๅ…จๆŸฅ่ฏข

็”จๆˆทๆŸฅ่ฏขๅฝ’ๆกฃๆ•ฐๆฎ
    โ”‚
    โ”œโ”€โ”€ 1. ๅ‰็ซฏๅŠ ่ฝฝ Schema Registry (JSON)
    โ”‚       โ†’ ๅŠจๆ€ๆธฒๆŸ“ๆŸฅ่ฏข่กจๅ• + ่กจๆ ผๅˆ—
    โ”‚
    โ”œโ”€โ”€ 2. ็”จๆˆท่พ“ๅ…ฅๆŸฅ่ฏขๆกไปถ
    โ”‚       โ†’ ๅ‰็ซฏๆ นๆฎ Schema ๆ ก้ชŒ + ๆž„ๅปบๆŸฅ่ฏข่ฏทๆฑ‚
    โ”‚
    โ”œโ”€โ”€ 3. ๅŽ็ซฏๆŽฅๆ”ถ่ฏทๆฑ‚
    โ”‚       โ”œโ”€โ”€ ๆ ก้ชŒ็”จๆˆทๅฏนๅฝ“ๅ‰็ณป็ปŸ็š„ RBAC ๆƒ้™
    โ”‚       โ”œโ”€โ”€ ๆž„ๅปบ Databricks SQL ่ฏญๅฅ
    โ”‚       โ””โ”€โ”€ ้€š่ฟ‡ Statement Execution API ๆ‰ง่กŒ
    โ”‚           (UC ่‡ชๅŠจๅบ”็”จ Column Mask ่„ฑๆ•)
    โ”‚
    โ”œโ”€โ”€ 4. ้™„ไปถ้ข„่งˆ/ไธ‹่ฝฝ
    โ”‚       โ”œโ”€โ”€ ๅ‰็ซฏ่ฏทๆฑ‚ SAS URL
    โ”‚       โ”œโ”€โ”€ ๅŽ็ซฏๆ ก้ชŒๆƒ้™ โ†’ ็ญพๅ‘ โ‰ค15 ๅˆ†้’Ÿ็š„ SAS Token
    โ”‚       โ””โ”€โ”€ ๅ‰็ซฏ็›ดๆŽฅ้€š่ฟ‡ SAS URL ่ฎฟ้—ฎ Azure Blob
    โ”‚
    โ””โ”€โ”€ 5. ่ฎฐๅฝ•ๆŸฅ่ฏขๅฎก่ฎกๆ—ฅๅฟ—

Phase 4: ๆ•ฐๆฎ็”Ÿๅ‘ฝๅ‘จๆœŸ้”€ๆฏ

ๅฎšๆ—ถๆ‰ซๆๅˆฐๆœŸ็ณป็ปŸ
    โ”‚
    โ”œโ”€โ”€ 1. ๆ‰ซๆ ArchiveSystem ไธญ่ถ…่ฟ‡ RetentionYears ็š„็ณป็ปŸ
    โ”‚
    โ”œโ”€โ”€ 2. ้€š็Ÿฅ็ฎก็†ๅ‘˜็กฎ่ฎค้”€ๆฏ
    โ”‚
    โ”œโ”€โ”€ 3. ๆไบค Databricks ้”€ๆฏไปปๅŠก
    โ”‚       โ”œโ”€โ”€ DROP TABLE lake.{system_code}.{table_name}
    โ”‚       โ”œโ”€โ”€ VACUUM ็‰ฉ็†ๅ›žๆ”ถๅญ˜ๅ‚จ็ฉบ้—ด
    โ”‚       โ””โ”€โ”€ ๅˆ ้™ค Azure Blob ้™„ไปถๅฎนๅ™จ
    โ”‚
    โ”œโ”€โ”€ 4. ๆธ…็† Unity Catalog ๆณจๅ†Œ
    โ”‚
    โ””โ”€โ”€ 5. ่ฎฐๅฝ•้”€ๆฏๅฎก่ฎกๆ—ฅๅฟ— โ†’ ๆ›ดๆ–ฐ็ณป็ปŸ็Šถๆ€ไธบ DESTROYED

๐Ÿ—„๏ธ ๆ•ฐๆฎๅบ“่ฎพ่ฎก๏ผˆๅ…ƒๆ•ฐๆฎๅบ“ โ€” MySQL๏ผ‰

ๆ ธๅฟƒๅŽŸๅˆ™: ๅ…ƒๆ•ฐๆฎๅบ“ไป…ๅญ˜ๅ‚จ็ณป็ปŸ้…็ฝฎใ€Schema ๆณจๅ†Œใ€RBAC ๆƒ้™ๅ’Œๅฎก่ฎกๆ—ฅๅฟ—ใ€‚ ็ปไธ็›ดๆŽฅๅญ˜ๅ‚จๆˆ–ๆŸฅ่ฏขๅฝ’ๆกฃ็š„ไธšๅŠกๆ•ฐๆฎใ€‚ๆ‰€ๆœ‰ไธšๅŠกๆ•ฐๆฎๆŸฅ่ฏข็ปŸไธ€่ตฐ Databricks SQLใ€‚

ๆƒ้™็ฎก็†ๆจกๅ—

่กจๅ ่ฏดๆ˜Ž
sys_user ็”จๆˆท่กจ
sys_role ่ง’่‰ฒ่กจ
sys_menu ่œๅ•/้กต้ข่กจ๏ผˆๆ ‘ๅฝข็ป“ๆž„๏ผ‰
sys_permission ๆƒ้™่กจ๏ผˆๆŒ‰้’ฎ็บง๏ผ‰
sys_user_role ็”จๆˆท-่ง’่‰ฒๅ…ณ่”
sys_role_menu ่ง’่‰ฒ-่œๅ•ๅ…ณ่”
sys_role_permission ่ง’่‰ฒ-ๆƒ้™ๅ…ณ่”

้€€ๅฝน็ฎก็†ๆจกๅ—

่กจๅ ่ฏดๆ˜Ž
decomm_system ้€€ๅฝน็ณป็ปŸๆณจๅ†Œ๏ผˆ็Šถๆ€๏ผšCONFIGURED โ†’ SYNCING โ†’ ARCHIVED โ†’ DESTROYED๏ผ‰
sys_role_system ่ง’่‰ฒ-็ณป็ปŸๆ˜ ๅฐ„๏ผˆไธๅŒ่ง’่‰ฒ็ฎก็†ไธๅŒ้€€ๅฝน็ณป็ปŸ๏ผ‰
decomm_db_config ๆบๆ•ฐๆฎๅบ“้…็ฝฎ๏ผˆ่ฟžๆŽฅไฟกๆฏๅŠ ๅฏ†ๅญ˜ๅ‚จ๏ผ‰
decomm_storage_config ็›ฎๆ ‡ๅญ˜ๅ‚จ้…็ฝฎ๏ผˆADLS/Blob ่ฟžๆŽฅๅŠ ๅฏ†๏ผ‰
decomm_schema_registry Schema ๆ่ฟฐ็ฌฆๆณจๅ†Œ่กจ๏ผˆJSON ๆ ผๅผ็š„่กจ็ป“ๆž„ๅ…ƒๆ•ฐๆฎ๏ผŒ้ฉฑๅŠจๅŠจๆ€ๅ‰็ซฏ๏ผ‰
decomm_sync_job ๆ•ฐๆฎๅŒๆญฅไปปๅŠก่ฎฐๅฝ•
decomm_sync_log ๅŒๆญฅไปปๅŠกๆ‰ง่กŒๆ—ฅๅฟ—
decomm_lifecycle_policy ๆ•ฐๆฎ็”Ÿๅ‘ฝๅ‘จๆœŸ็ญ–็•ฅ๏ผˆไฟ็•™ๅนด้™ใ€้”€ๆฏ่ง„ๅˆ™๏ผ‰
sys_audit_log ๅ…จๅฑ€ๅฎก่ฎกๆ—ฅๅฟ—

Schema Registry JSON ็ป“ๆž„็คบไพ‹

{
  "tableName": "CUSTOMER_ORDER",
  "tableAlias": "ๅฎขๆˆท่ฎขๅ•",
  "primaryKey": "order_id",
  "catalogSchema": "lake.CRM_V1",
  "columns": [
    {
      "name": "order_id",
      "type": "BIGINT",
      "alias": "่ฎขๅ•็ผ–ๅท",
      "queryType": "equal",
      "showInList": true,
      "isPii": false
    },
    {
      "name": "customer_name",
      "type": "VARCHAR(100)",
      "alias": "ๅฎขๆˆทๅง“ๅ",
      "queryType": "like",
      "showInList": true,
      "isPii": true,
      "maskPolicy": "MASK_FIRST_N(4)"
    },
    {
      "name": "order_date",
      "type": "DATE",
      "alias": "ไธ‹ๅ•ๆ—ฅๆœŸ",
      "queryType": "date-range",
      "showInList": true,
      "isPii": false
    }
  ],
  "isAttachmentTable": false
}

๐Ÿ› ๏ธ ๆŠ€ๆœฏๆ ˆ

ๅฑ‚็บง ๆŠ€ๆœฏ ็‰ˆๆœฌ ่ฏดๆ˜Ž
ๅ‰็ซฏๆก†ๆžถ Vue 3 + TypeScript 3.4+ Composition API
UI ็ป„ไปถๅบ“ Element Plus 2.x ไผไธš็บง็ป„ไปถ
็Šถๆ€็ฎก็† Pinia 2.x Vue 3 ๆŽจ่
่ทฏ็”ฑ Vue Router 4.x ๅŠจๆ€่ทฏ็”ฑ
HTTP Axios 1.x ่ฏทๆฑ‚ๅฐ่ฃ…
ๆž„ๅปบ Vite 5.x ๅ‰็ซฏๆž„ๅปบ
ๅŽ็ซฏๆก†ๆžถ Java + Spring Boot 17 / 3.2+ ไธปๅŠ›ๆก†ๆžถ
ORM MyBatis-Plus 3.5+ ๅ…ƒๆ•ฐๆฎๅบ“ๆ“ไฝœ
ๅฎ‰ๅ…จ Spring Security + JWT โ€” ่ฎค่ฏๆŽˆๆƒ
็ผ“ๅญ˜ Redis 6+ Token/Session ็ผ“ๅญ˜
ๅ…ƒๆ•ฐๆฎๅบ“ MySQL 8.0 ้…็ฝฎๅ…ƒๆ•ฐๆฎ
ๆ•ฐๆฎๅบ“่ฟ็งป Flyway โ€” Schema ็‰ˆๆœฌ็ฎก็†
ๅคงๆ•ฐๆฎๅผ•ๆ“Ž Databricks Java SDK โ€” ETL + SQL ๆŸฅ่ฏข
ๆ•ฐๆฎๆ ผๅผ Apache Iceberg โ€” ๆน–ไป“ไธ€ไฝ“ๅฝ’ๆกฃๆ ผๅผ
ๆ•ฐๆฎๆฒป็† Unity Catalog โ€” ่กจๆƒ้™ + Column Mask
ๅฏน่ฑกๅญ˜ๅ‚จ Azure ADLS Gen2 โ€” ็ป“ๆž„ๅŒ–ๆ•ฐๆฎๅฝ’ๆกฃ
้™„ไปถๅญ˜ๅ‚จ Azure Blob Storage โ€” ้ž็ป“ๆž„ๅŒ–ๆ–‡ไปถ
ๅฏ†้’ฅ็ฎก็† Azure Key Vault โ€” ๅ‡ญๆฎๅŠ ๅฏ†
API ๆ–‡ๆกฃ SpringDoc OpenAPI 2.x Swagger UI
ๅฎนๅ™จๅŒ– Docker + Docker Compose โ€” ้ƒจ็ฝฒ

๐Ÿ“ ้กน็›ฎ็ป“ๆž„

RimsDecommision/
โ”œโ”€โ”€ README.md                          # ้กน็›ฎไธปๆ–‡ๆกฃ๏ผˆๆœฌๆ–‡ไปถ๏ผ‰
โ”œโ”€โ”€ CLAUDE.md                          # AI ็ผ–็ ่ง„่ŒƒไธŽๆŒ‡ไปค้›†
โ”œโ”€โ”€ AGENT.md                           # AI ไธšๅŠก้ข†ๅŸŸ็Ÿฅ่ฏ†ๅบ“
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ copilot-instructions.md        # GitHub Copilot ๆŒ‡ไปค
โ”œโ”€โ”€ docker-compose.yml                 # ๅฎนๅ™จ็ผ–ๆŽ’
โ”œโ”€โ”€ docs/                              # ๆžถๆž„่ฎพ่ฎกๆ–‡ๆกฃ
โ”‚   โ”œโ”€โ”€ architecture/                  # ๆžถๆž„ๅ†ณ็ญ–่ฎฐๅฝ• (ADR)
โ”‚   โ””โ”€โ”€ api/                           # API ๆŽฅๅฃๆ–‡ๆกฃ
โ”œโ”€โ”€ backend/                           # Spring Boot ๅŽ็ซฏ
โ”‚   โ””โ”€โ”€ src/main/java/com/rims/decommission/
โ”‚       โ”œโ”€โ”€ config/                    # Spring ้…็ฝฎ
โ”‚       โ”œโ”€โ”€ security/                  # JWT + Spring Security
โ”‚       โ”œโ”€โ”€ controller/                # REST ๆŽงๅˆถๅ™จ
โ”‚       โ”œโ”€โ”€ service/                   # ไธšๅŠก้€ป่พ‘
โ”‚       โ”œโ”€โ”€ mapper/                    # MyBatis Mapper
โ”‚       โ”œโ”€โ”€ entity/                    # ๆ•ฐๆฎๅบ“ๅฎžไฝ“
โ”‚       โ”œโ”€โ”€ dto/                       # ๆ•ฐๆฎไผ ่พ“ๅฏน่ฑก
โ”‚       โ”œโ”€โ”€ databricks/                # Databricks SDK ้›†ๆˆ
โ”‚       โ”‚   โ”œโ”€โ”€ DatabricksJobManager   # Job ๆไบค/็Šถๆ€่ฝฎ่ฏข
โ”‚       โ”‚   โ”œโ”€โ”€ DatabricksSqlExecutor  # SQL Statement Execution
โ”‚       โ”‚   โ””โ”€โ”€ UnityCatalogManager    # UC ่กจๆณจๅ†Œ/ๆƒ้™/่„ฑๆ•
โ”‚       โ”œโ”€โ”€ storage/                   # Azure ๅญ˜ๅ‚จ้›†ๆˆ
โ”‚       โ”‚   โ”œโ”€โ”€ AdlsService            # ADLS Gen2 ๆ“ไฝœ
โ”‚       โ”‚   โ”œโ”€โ”€ BlobSasService         # SAS ไปค็‰Œ็ญพๅ‘
โ”‚       โ”‚   โ””โ”€โ”€ KeyVaultService        # Key Vault ๅŠ ่งฃๅฏ†
โ”‚       โ”œโ”€โ”€ schema/                    # Schema Registry ๅผ•ๆ“Ž
โ”‚       โ”‚   โ”œโ”€โ”€ SchemaRegistryService  # Schema CRUD
โ”‚       โ”‚   โ””โ”€โ”€ DynamicQueryBuilder    # JSONโ†’SQL ่ฝฌๆข
โ”‚       โ””โ”€โ”€ common/                    # ้€š็”จๆจกๅ—
โ”œโ”€โ”€ frontend/                          # Vue 3 ๅ‰็ซฏ
โ”‚   โ””โ”€โ”€ src/
โ”‚       โ”œโ”€โ”€ api/                       # ๆŒ‰ไธšๅŠกๅŸŸๆ‹†ๅˆ†็š„ API
โ”‚       โ”œโ”€โ”€ views/
โ”‚       โ”‚   โ”œโ”€โ”€ login/                 # ็™ปๅฝ•้กต
โ”‚       โ”‚   โ”œโ”€โ”€ dashboard/             # ไปช่กจ็›˜
โ”‚       โ”‚   โ”œโ”€โ”€ system/                # ็ณป็ปŸ็ฎก็† (RBAC)
โ”‚       โ”‚   โ”œโ”€โ”€ decommission/          # ้€€ๅฝน็ฎก็†
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ system-config/     # ็ณป็ปŸ้…็ฝฎๅ‘ๅฏผ
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ schema-registry/   # Schema ็ฎก็†
โ”‚       โ”‚   โ”‚   โ”œโ”€โ”€ sync-monitor/      # ๅŒๆญฅ็›‘ๆŽง
โ”‚       โ”‚   โ”‚   โ””โ”€โ”€ archive-query/     # ๅฝ’ๆกฃๆ•ฐๆฎๆŸฅ่ฏข
โ”‚       โ”‚   โ””โ”€โ”€ audit/                 # ๅฎก่ฎกไธญๅฟƒ
โ”‚       โ”œโ”€โ”€ components/
โ”‚       โ”‚   โ””โ”€โ”€ dynamic/               # โญ ๅŠจๆ€ๆธฒๆŸ“็ป„ไปถ
โ”‚       โ”‚       โ”œโ”€โ”€ DynamicFilterForm  # Schemaโ†’ๆŸฅ่ฏข่กจๅ•
โ”‚       โ”‚       โ”œโ”€โ”€ DynamicDataTable   # Schemaโ†’ๆ•ฐๆฎ่กจๆ ผ
โ”‚       โ”‚       โ””โ”€โ”€ DynamicColumn      # ๆŒ‰็ฑปๅž‹ๆธฒๆŸ“ๅˆ—
โ”‚       โ”œโ”€โ”€ composables/               # ็ป„ๅˆๅผๅ‡ฝๆ•ฐ
โ”‚       โ”œโ”€โ”€ store/                     # Pinia Store
โ”‚       โ”œโ”€โ”€ router/                    # ่ทฏ็”ฑ๏ผˆๅซๅŠจๆ€่ทฏ็”ฑ๏ผ‰
โ”‚       โ”œโ”€โ”€ types/                     # TypeScript ็ฑปๅž‹
โ”‚       โ””โ”€โ”€ utils/                     # ๅทฅๅ…ทๅ‡ฝๆ•ฐ
โ””โ”€โ”€ scripts/
    โ”œโ”€โ”€ sql/                           # Flyway ่ฟ็งป่„šๆœฌ
    โ””โ”€โ”€ databricks/                    # Databricks Notebook
        โ”œโ”€โ”€ data_sync_notebook.py      # ๆ•ฐๆฎๅŒๆญฅๅ…ฅๆน–
        โ”œโ”€โ”€ data_compaction.py         # ๅฐๆ–‡ไปถๅˆๅนถ
        โ””โ”€โ”€ data_destroy_notebook.py   # ๆ•ฐๆฎ็‰ฉ็†้”€ๆฏ

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

็Žฏๅขƒ่ฆๆฑ‚

  • JDK 17+ใ€Maven 3.8+
  • Node.js 18+ใ€pnpm 8+
  • MySQL 8.0+ใ€Redis 6+
  • Azure ่ฎข้˜… (ADLS Gen2, Blob Storage, Key Vault)
  • Databricks Workspace

ๆœฌๅœฐๅผ€ๅ‘

# ๅŽ็ซฏ
cd backend
mvn clean package -DskipTests
mvn spring-boot:run -Dspring-boot.run.profiles=dev

# ๅ‰็ซฏ
cd frontend
pnpm install
pnpm dev

# Docker Compose (ไป…ๅฏๅŠจๅŸบ็ก€่ฎพๆ–ฝ)
docker-compose up -d mysql redis

็Žฏๅขƒๅ˜้‡๏ผˆ.env๏ผ‰

# ๅ…ƒๆ•ฐๆฎๅบ“
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_DATABASE=rims_decommission
MYSQL_USERNAME=rims
MYSQL_PASSWORD=***

# Redis
REDIS_HOST=localhost
REDIS_PORT=6379

# Databricks
DATABRICKS_HOST=https://adb-xxx.azuredatabricks.net
DATABRICKS_TOKEN=***
DATABRICKS_CLUSTER_ID=xxx
DATABRICKS_WAREHOUSE_ID=xxx
DATABRICKS_CATALOG=lake

# Azure
AZURE_KEY_VAULT_URL=https://rims-kv.vault.azure.net
AZURE_STORAGE_ACCOUNT=rimsarchive
AZURE_BLOB_CONTAINER=attachments

๐Ÿ“„ License

Internal Use Only โ€” ไป…้™ไผไธšๅ†…้ƒจไฝฟ็”จ