Compare commits

..

2 Commits

Author SHA1 Message Date
Neo
d60dbb7a93 Merge branch 'dev' 2026-01-27 22:47:57 +08:00
Neo
4c192e921c 合并 2026-01-27 22:45:50 +08:00
385 changed files with 17074 additions and 494742 deletions

View File

@@ -1,60 +0,0 @@
$ErrorActionPreference = "Stop"
Write-Host "[1/6] Collecting environment info..." -ForegroundColor Cyan
$report = @()
$report += "# ETL Manager Environment Report"
$report += "Timestamp: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
$report += ""
Write-Host "[2/6] Resolving python/pip..." -ForegroundColor Cyan
$report += "## Executables"
$py = (Get-Command python -ErrorAction SilentlyContinue)
$pip = (Get-Command pip -ErrorAction SilentlyContinue)
if ($py) { $report += "python: $($py.Source)" } else { $report += "python: NOT FOUND" }
if ($pip) { $report += "pip: $($pip.Source)" } else { $report += "pip: NOT FOUND" }
$report += ""
Write-Host "[3/6] Python details..." -ForegroundColor Cyan
$report += "## Python info"
$report += (python -c "import sys, platform; print('version='+sys.version.replace('\n',' ')); print('executable='+sys.executable); print('prefix='+sys.prefix); print('base_prefix='+sys.base_prefix); print('arch='+platform.architecture()[0]); print('platform='+platform.platform())" 2>&1)
$report += ""
Write-Host "[4/6] pip details..." -ForegroundColor Cyan
$report += "## pip"
$report += (python -m pip --version 2>&1)
$report += ""
Write-Host "[5/6] PySide6 details..." -ForegroundColor Cyan
$report += "## PySide6"
$pyside = @'
try:
import PySide6
from PySide6 import QtCore
print('PySide6='+PySide6.__version__)
print('Qt='+QtCore.qVersion())
print('PySide6_path='+PySide6.__file__)
print('Qt_plugins_path='+QtCore.QLibraryInfo.path(QtCore.QLibraryInfo.PluginsPath))
except Exception as e:
print('PySide6_import_error='+repr(e))
'@
$report += ($pyside | python - 2>&1)
$report += ""
Write-Host "[6/6] Installed packages..." -ForegroundColor Cyan
$report += "## Installed packages (freeze)"
$report += (python -m pip list --format=freeze 2>&1)
$reportPath = "D:\env_report_local.txt"
if (-not (Test-Path "D:\")) {
Write-Host "[WARN] D: not found, fallback to current directory." -ForegroundColor Yellow
$reportPath = ".\env_report_local.txt"
}
$reportDir = Split-Path $reportPath
if ($reportDir -and -not (Test-Path $reportDir)) {
New-Item -ItemType Directory -Path $reportDir -Force | Out-Null
}
Write-Host "[WRITE] $reportPath" -ForegroundColor Green
$report -join "`n" | Set-Content -Path $reportPath -Encoding UTF8
Write-Host "[DONE]" -ForegroundColor Green
Write-Output $reportPath

View File

@@ -1,121 +0,0 @@
# ETL Manager Environment Report
Timestamp: 2026-01-28 00:56:34
## Executables
python: C:\ProgramData\miniconda3\python.exe
pip: C:\ProgramData\miniconda3\Scripts\pip.exe
## Python info
version=3.13.9 | packaged by Anaconda, Inc. | (main, Oct 21 2025, 19:09:58) [MSC v.1929 64 bit (AMD64)]
executable=C:\ProgramData\miniconda3\python.exe
prefix=C:\ProgramData\miniconda3
base_prefix=C:\ProgramData\miniconda3
arch=64bit
platform=Windows-10-10.0.17763-SP0
## pip
pip 25.3 from C:\ProgramData\miniconda3\Lib\site-packages\pip (python 3.13)
## PySide6
PySide6=6.10.1
Qt=6.10.1
PySide6_path=C:\ProgramData\miniconda3\Lib\site-packages\PySide6\__init__.py
Qt_plugins_path=C:/ProgramData/miniconda3/Lib/site-packages/PySide6/plugins
## Installed packages (freeze)
altgraph==0.17.5
anaconda-anon-usage==0.7.4
annotated-types==0.6.0
archspec==0.2.5
beautifulsoup4==4.13.4
boltons==25.0.0
brotlicffi==1.1.0.0
certifi==2025.11.12
cffi==2.0.0
chardet==3.0.4
charset-normalizer==3.4.4
colorama==0.4.6
conda==25.9.1
conda-anaconda-telemetry==0.3.0
conda-anaconda-tos==0.2.2
conda-content-trust==0.2.0
conda-libmamba-solver==25.4.0
conda-package-handling==2.4.0
conda_package_streaming==0.12.0
coverage==7.12.0
cryptography==46.0.3
distro==1.9.0
et_xmlfile==2.0.0
frozendict==2.4.6
ftfy==6.3.1
googletrans==4.0.0rc1
h11==0.9.0
h2==3.2.0
hpack==3.0.0
hstspreload==2025.1.1
httpcore==0.9.1
httpx==0.13.3
hyperframe==5.2.0
idna==2.10
iniconfig==2.3.0
jsonpatch==1.33
jsonpointer==3.0.0
libmambapy==2.3.2
lxml==6.0.2
markdown-it-py==4.0.0
mdurl==0.1.2
menuinst==2.4.1
numpy==2.3.2
openpyxl==3.1.5
packaging==25.0
pandas==2.3.1
pefile==2024.8.26
pip==25.2
platformdirs==4.5.0
pluggy==1.5.0
psycopg2==2.9.10
psycopg2-binary==2.9.11
pyaes==1.6.1
pyasn1==0.6.1
pycosat==0.6.6
pycparser==2.23
pydantic==2.12.3
pydantic_core==2.41.4
Pygments==2.19.2
pyinstaller==6.18.0
pyinstaller-hooks-contrib==2025.11
PySide6==6.10.1
PySide6_Addons==6.10.1
PySide6_Essentials==6.10.1
PySocks==1.7.1
pytest==9.0.1
pytest-cov==7.0.0
python-dateutil==2.9.0.post0
python-docx==1.2.0
python-dotenv==1.2.1
pytz==2025.2
pywin32-ctypes==0.2.3
requests==2.32.5
rfc3986==1.5.0
rich==14.2.0
rsa==4.9.1
ruamel.yaml==0.18.16
ruamel.yaml.clib==0.2.14
setuptools==80.9.0
shiboken6==6.10.1
six==1.17.0
sniffio==1.3.1
soupsieve==2.7
Telethon==1.40.0
tqdm==4.67.1
truststore==0.10.1
typing_extensions==4.15.0
typing-inspection==0.4.2
tzdata==2025.2
urllib3==2.5.0
wcwidth==0.2.14
wheel==0.45.1
win_inet_pton==1.1.0
xlsxwriter==3.2.9
zstandard==0.24.0

View File

@@ -32,7 +32,7 @@ SCHEMA_ETL=etl_admin
# API 配置 # API 配置
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
API_BASE=https://pc.ficoo.vip/apiprod/admin/v1/ API_BASE=https://pc.ficoo.vip/apiprod/admin/v1/
API_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnQtdHlwZSI6IjQiLCJ1c2VyLXR5cGUiOiIxIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiMTIiLCJyb2xlLWlkIjoiMTIiLCJ0ZW5hbnQtaWQiOiIyNzkwNjgzMTYwNzA5OTU3Iiwibmlja25hbWUiOiLnp5_miLfnrqHnkIblkZjvvJrmganmgakxIiwic2l0ZS1pZCI6IjAiLCJtb2JpbGUiOiIxMzgxMDUwMjMwNCIsInNpZCI6IjI5NTA0ODk2NTgzOTU4NDUiLCJzdGFmZi1pZCI6IjMwMDk5MTg2OTE1NTkwNDUiLCJvcmctaWQiOiIwIiwicm9sZS10eXBlIjoiMyIsInJlZnJlc2hUb2tlbiI6Ik1oKzFpTitjclRHMTY3cUp5SzFXYllteVBaaUhjdDI2ZTZDZkJvd1pxSVk9IiwicmVmcmVzaEV4cGlyeVRpbWUiOiIyMDI2LzIvNyDkuIvljYg5OjU2OjE4IiwibmVlZENoZWNrVG9rZW4iOiJmYWxzZSIsImV4cCI6MTc3MDQ3MjU3OCwiaXNzIjoidGVzdCIsImF1ZCI6IlVzZXIifQ.rY03o82SKznD7NOktXKzTOI1btl2FHsklMCChOlZUeY API_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGllbnQtdHlwZSI6IjQiLCJ1c2VyLXR5cGUiOiIxIiwiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS93cy8yMDA4LzA2L2lkZW50aXR5L2NsYWltcy9yb2xlIjoiMTIiLCJyb2xlLWlkIjoiMTIiLCJ0ZW5hbnQtaWQiOiIyNzkwNjgzMTYwNzA5OTU3Iiwibmlja25hbWUiOiLnp5_miLfnrqHnkIblkZjvvJrmganmgakxIiwic2l0ZS1pZCI6IjAiLCJtb2JpbGUiOiIxMzgxMDUwMjMwNCIsInNpZCI6IjI5NTA0ODk2NTgzOTU4NDUiLCJzdGFmZi1pZCI6IjMwMDk5MTg2OTE1NTkwNDUiLCJvcmctaWQiOiIwIiwicm9sZS10eXBlIjoiMyIsInJlZnJlc2hUb2tlbiI6Iks1ZnBhYlRTNkFsR0FpMmN4WGYrMHdJVkk0L2UvTVQrSVBHM3V5VWRrSjg9IiwicmVmcmVzaEV4cGlyeVRpbWUiOiIyMDI2LzEvMzEg5LiL5Y2IMTA6MTQ6NTEiLCJuZWVkQ2hlY2tUb2tlbiI6ImZhbHNlIiwiZXhwIjoxNzY5ODY4ODkxLCJpc3MiOiJ0ZXN0IiwiYXVkIjoiVXNlciJ9.BH3-iwwrBczb8aFfI__6kwe3AIsEPacN9TruaTrQ3nY
# API 请求超时(秒) # API 请求超时(秒)
API_TIMEOUT=20 API_TIMEOUT=20

View File

@@ -0,0 +1,44 @@
# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\gui\\main.py'],
pathex=[],
binaries=[],
datas=[('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\gui\\resources', 'gui/resources'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_dwd_doc.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_dws.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_etl_admin.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\schema_ODS_doc.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\seed_ods_tasks.sql', 'database'), ('C:\\dev\\LLTQ\\ETL\\feiqiu-ETL\\etl_billiards\\database\\seed_scheduler_tasks.sql', 'database')],
hiddenimports=['PySide6.QtCore', 'PySide6.QtGui', 'PySide6.QtWidgets', 'psycopg2', 'psycopg2.extras', 'psycopg2.extensions', 'gui.models.task_model', 'gui.models.schedule_model', 'gui.utils.cli_builder', 'gui.utils.config_helper', 'gui.utils.app_settings', 'gui.workers.task_worker', 'gui.workers.db_worker', 'gui.widgets.settings_dialog'],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=['matplotlib', 'numpy', 'pandas', 'scipy', 'PIL', 'cv2', 'tkinter'],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='ETL_Manager',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='ETL_Manager',
)

View File

@@ -90,11 +90,9 @@ def build_exe(onefile: bool = False, console: bool = False):
# 隐式导入 # 隐式导入
hidden_imports = [ hidden_imports = [
# PySide6 核心模块
"PySide6.QtCore", "PySide6.QtCore",
"PySide6.QtGui", "PySide6.QtGui",
"PySide6.QtWidgets", "PySide6.QtWidgets",
# 数据库
"psycopg2", "psycopg2",
"psycopg2.extras", "psycopg2.extras",
"psycopg2.extensions", "psycopg2.extensions",
@@ -140,9 +138,6 @@ def build_exe(onefile: bool = False, console: bool = False):
result = subprocess.run(cmd, cwd=str(project_root)) result = subprocess.run(cmd, cwd=str(project_root))
if result.returncode == 0: if result.returncode == 0:
# 打包后精简:删除不需要的文件
slim_dist(project_root / "dist" / "ETL_Manager" / "_internal")
print() print()
print("=" * 50) print("=" * 50)
print("打包成功!") print("打包成功!")
@@ -154,77 +149,6 @@ def build_exe(onefile: bool = False, console: bool = False):
sys.exit(1) sys.exit(1)
def slim_dist(internal_dir: Path):
"""精简打包后的文件,删除不需要的内容"""
if not internal_dir.exists():
return
print()
print("精简打包文件...")
removed_size = 0
# 1. 删除不需要的翻译文件(只保留中文和英文)
translations_dir = internal_dir / "PySide6" / "translations"
if translations_dir.exists():
keep_langs = {"zh_CN", "zh_TW", "en"}
for qm_file in translations_dir.glob("*.qm"):
# 检查是否是需要保留的语言
keep = False
for lang in keep_langs:
if lang in qm_file.name:
keep = True
break
if not keep:
size = qm_file.stat().st_size
qm_file.unlink()
removed_size += size
# 2. 删除 opengl32sw.dll软件渲染20MB通常不需要
opengl_sw = internal_dir / "PySide6" / "opengl32sw.dll"
if opengl_sw.exists():
size = opengl_sw.stat().st_size
opengl_sw.unlink()
removed_size += size
print(f" 删除: opengl32sw.dll ({size / 1024 / 1024:.1f} MB)")
# 3. 删除不需要的 Qt 模块 DLL如果存在
unnecessary_dlls = [
"Qt6Pdf.dll", # PDF 支持
"Qt6Qml.dll", # QML 引擎
"Qt6QmlMeta.dll",
"Qt6QmlModels.dll",
"Qt6QmlWorkerScript.dll",
"Qt6Quick.dll", # Quick UI
"Qt6VirtualKeyboard.dll", # 虚拟键盘
]
pyside6_dir = internal_dir / "PySide6"
for dll_name in unnecessary_dlls:
dll_path = pyside6_dir / dll_name
if dll_path.exists():
size = dll_path.stat().st_size
dll_path.unlink()
removed_size += size
print(f" 删除: {dll_name} ({size / 1024 / 1024:.1f} MB)")
# 4. 删除不需要的插件目录
unnecessary_plugins = [
"networkinformation", # 网络信息
"tls", # TLS 支持(数据库已有)
]
plugins_dir = pyside6_dir / "plugins"
if plugins_dir.exists():
for plugin_name in unnecessary_plugins:
plugin_path = plugins_dir / plugin_name
if plugin_path.exists():
size = sum(f.stat().st_size for f in plugin_path.rglob("*") if f.is_file())
shutil.rmtree(plugin_path)
removed_size += size
print(f" 删除插件: {plugin_name}")
print(f"共节省: {removed_size / 1024 / 1024:.1f} MB")
def main(): def main():
"""主函数""" """主函数"""
import argparse import argparse

View File

@@ -109,18 +109,9 @@ DEFAULTS = {
"mode": "history", "mode": "history",
"history_start": "2025-07-01", "history_start": "2025-07-01",
"history_end": "", "history_end": "",
"include_dimensions": True, "include_dimensions": False,
"auto_check": False, "auto_check": False,
"auto_backfill": False,
"compare_content": True,
"content_sample_limit": 50,
"backfill_mismatch": True,
"recheck_after_backfill": True,
"ods_task_codes": "", "ods_task_codes": "",
"force_monthly_split": True,
},
"dwd": {
"fact_upsert": True,
}, },
} }

View File

@@ -55,12 +55,7 @@ ENV_MAP = {
"INTEGRITY_INCLUDE_DIMENSIONS": ("integrity.include_dimensions",), "INTEGRITY_INCLUDE_DIMENSIONS": ("integrity.include_dimensions",),
"INTEGRITY_AUTO_CHECK": ("integrity.auto_check",), "INTEGRITY_AUTO_CHECK": ("integrity.auto_check",),
"INTEGRITY_AUTO_BACKFILL": ("integrity.auto_backfill",), "INTEGRITY_AUTO_BACKFILL": ("integrity.auto_backfill",),
"INTEGRITY_COMPARE_CONTENT": ("integrity.compare_content",),
"INTEGRITY_CONTENT_SAMPLE_LIMIT": ("integrity.content_sample_limit",),
"INTEGRITY_BACKFILL_MISMATCH": ("integrity.backfill_mismatch",),
"INTEGRITY_RECHECK_AFTER_BACKFILL": ("integrity.recheck_after_backfill",),
"INTEGRITY_ODS_TASK_CODES": ("integrity.ods_task_codes",), "INTEGRITY_ODS_TASK_CODES": ("integrity.ods_task_codes",),
"DWD_FACT_UPSERT": ("dwd.fact_upsert",),
} }

View File

@@ -7,7 +7,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles (
tenant_id BIGINT, tenant_id BIGINT,
register_site_id BIGINT, register_site_id BIGINT,
site_name TEXT, site_name TEXT,
id BIGINT, id BIGINT PRIMARY KEY,
system_member_id BIGINT, system_member_id BIGINT,
member_card_grade_code BIGINT, member_card_grade_code BIGINT,
member_card_grade_name TEXT, member_card_grade_name TEXT,
@@ -19,12 +19,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_profiles (
status INT, status INT,
user_status INT, user_status INT,
create_time TIMESTAMP, create_time TIMESTAMP,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源export/test-json-doc/member_profiles.json分析member_profiles-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.member_profiles IS 'ODS 原始明细表:会员档案/会员账户信息。来源export/test-json-doc/member_profiles.json分析member_profiles-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -55,7 +53,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes (
register_site_id BIGINT, register_site_id BIGINT,
registerSiteName TEXT, registerSiteName TEXT,
paySiteName TEXT, paySiteName TEXT,
id BIGINT, id BIGINT PRIMARY KEY,
tenant_member_id BIGINT, tenant_member_id BIGINT,
tenant_member_card_id BIGINT, tenant_member_card_id BIGINT,
system_member_id BIGINT, system_member_id BIGINT,
@@ -75,12 +73,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_balance_changes (
operator_name TEXT, operator_name TEXT,
is_delete INT, is_delete INT,
create_time TIMESTAMP, create_time TIMESTAMP,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表会员余额变更流水。来源export/test-json-doc/member_balance_changes.json分析member_balance_changes-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.member_balance_changes IS 'ODS 原始明细表会员余额变更流水。来源export/test-json-doc/member_balance_changes.json分析member_balance_changes-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -121,7 +117,7 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards (
system_member_id BIGINT, system_member_id BIGINT,
register_site_id BIGINT, register_site_id BIGINT,
site_name TEXT, site_name TEXT,
id BIGINT, id BIGINT PRIMARY KEY,
member_card_grade_code BIGINT, member_card_grade_code BIGINT,
member_card_grade_code_name TEXT, member_card_grade_code_name TEXT,
member_card_type_name TEXT, member_card_type_name TEXT,
@@ -185,12 +181,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.member_stored_value_cards (
tenantName TEXT, tenantName TEXT,
pdAssisnatLevel TEXT, pdAssisnatLevel TEXT,
cxAssisnatLevel TEXT, cxAssisnatLevel TEXT,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源export/test-json-doc/member_stored_value_cards.json分析member_stored_value_cards-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.member_stored_value_cards IS 'ODS 原始明细表:会员储值/卡券账户列表。来源export/test-json-doc/member_stored_value_cards.json分析member_stored_value_cards-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -270,7 +264,7 @@ COMMENT ON COLUMN billiards_ods.member_stored_value_cards.payload IS '【说明
CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements ( CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements (
id BIGINT, id BIGINT PRIMARY KEY,
tenantid BIGINT, tenantid BIGINT,
siteid BIGINT, siteid BIGINT,
sitename TEXT, sitename TEXT,
@@ -331,12 +325,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.recharge_settlements (
isfirst INT, isfirst INT,
rechargecardamount NUMERIC(18,2), rechargecardamount NUMERIC(18,2),
giftcardamount NUMERIC(18,2), giftcardamount NUMERIC(18,2),
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表充值结算记录。来源export/test-json-doc/recharge_settlements.json分析recharge_settlements-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.recharge_settlements IS 'ODS 原始明细表充值结算记录。来源export/test-json-doc/recharge_settlements.json分析recharge_settlements-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -408,7 +400,7 @@ COMMENT ON COLUMN billiards_ods.recharge_settlements.payload IS '【说明】完
CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records ( CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records (
id BIGINT, id BIGINT PRIMARY KEY,
tenantid BIGINT, tenantid BIGINT,
siteid BIGINT, siteid BIGINT,
sitename TEXT, sitename TEXT,
@@ -469,12 +461,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_records (
isfirst INT, isfirst INT,
rechargecardamount NUMERIC(18,2), rechargecardamount NUMERIC(18,2),
giftcardamount NUMERIC(18,2), giftcardamount NUMERIC(18,2),
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源export/test-json-doc/settlement_records.json分析settlement_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.settlement_records IS 'ODS 原始明细表:结账/结算记录。来源export/test-json-doc/settlement_records.json分析settlement_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -546,7 +536,7 @@ COMMENT ON COLUMN billiards_ods.settlement_records.payload IS '【说明】完
CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records ( CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records (
id BIGINT, id BIGINT PRIMARY KEY,
siteId BIGINT, siteId BIGINT,
siteProfile JSONB, siteProfile JSONB,
assistantName TEXT, assistantName TEXT,
@@ -559,12 +549,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_cancellation_records (
tableName TEXT, tableName TEXT,
trashReason TEXT, trashReason TEXT,
createTime TIMESTAMP, createTime TIMESTAMP,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源export/test-json-doc/assistant_cancellation_records.json分析assistant_cancellation_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.assistant_cancellation_records IS 'ODS 原始明细表:助教作废/取消记录。来源export/test-json-doc/assistant_cancellation_records.json分析assistant_cancellation_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -588,7 +576,7 @@ COMMENT ON COLUMN billiards_ods.assistant_cancellation_records.payload IS '【
CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master ( CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
site_id BIGINT, site_id BIGINT,
assistant_no TEXT, assistant_no TEXT,
@@ -650,12 +638,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_accounts_master (
light_equipment_id TEXT, light_equipment_id TEXT,
entry_sign_status INT, entry_sign_status INT,
resign_sign_status INT, resign_sign_status INT,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表助教档案主数据。来源export/test-json-doc/assistant_accounts_master.json分析assistant_accounts_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.assistant_accounts_master IS 'ODS 原始明细表助教档案主数据。来源export/test-json-doc/assistant_accounts_master.json分析assistant_accounts_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -728,7 +714,7 @@ COMMENT ON COLUMN billiards_ods.assistant_accounts_master.payload IS '【说明
CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records ( CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
site_id BIGINT, site_id BIGINT,
siteProfile JSONB, siteProfile JSONB,
@@ -793,11 +779,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.assistant_service_records (
is_not_responding INT, is_not_responding INT,
is_confirm INT, is_confirm INT,
payload JSONB NOT NULL, payload JSONB NOT NULL,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now()
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表助教服务流水。来源export/test-json-doc/assistant_service_records.json分析assistant_service_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.assistant_service_records IS 'ODS 原始明细表助教服务流水。来源export/test-json-doc/assistant_service_records.json分析assistant_service_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -872,7 +856,7 @@ COMMENT ON COLUMN billiards_ods.assistant_service_records.fetched_at IS '【说
CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master ( CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master (
id BIGINT, id BIGINT PRIMARY KEY,
site_id BIGINT, site_id BIGINT,
siteName TEXT, siteName TEXT,
"appletQrCodeUrl" TEXT, "appletQrCodeUrl" TEXT,
@@ -897,12 +881,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.site_tables_master (
table_status INT, table_status INT,
temporary_light_second INT, temporary_light_second INT,
virtual_table INT, virtual_table INT,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表门店桌台主数据。来源export/test-json-doc/site_tables_master.json分析site_tables_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.site_tables_master IS 'ODS 原始明细表门店桌台主数据。来源export/test-json-doc/site_tables_master.json分析site_tables_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -937,7 +919,7 @@ COMMENT ON COLUMN billiards_ods.site_tables_master.payload IS '【说明】完
CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records ( CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
site_id BIGINT, site_id BIGINT,
siteProfile JSONB, siteProfile JSONB,
@@ -957,12 +939,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_discount_records (
order_trade_no TEXT, order_trade_no TEXT,
is_delete INT, is_delete INT,
create_time TIMESTAMP, create_time TIMESTAMP,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表台费折扣记录。来源export/test-json-doc/table_fee_discount_records.json分析table_fee_discount_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.table_fee_discount_records IS 'ODS 原始明细表台费折扣记录。来源export/test-json-doc/table_fee_discount_records.json分析table_fee_discount_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -993,7 +973,7 @@ COMMENT ON COLUMN billiards_ods.table_fee_discount_records.payload IS '【说明
CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions ( CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
site_id BIGINT, site_id BIGINT,
siteProfile JSONB, siteProfile JSONB,
@@ -1033,11 +1013,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.table_fee_transactions (
salesman_user_id BIGINT, salesman_user_id BIGINT,
create_time TIMESTAMP, create_time TIMESTAMP,
payload JSONB NOT NULL, payload JSONB NOT NULL,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now()
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表台费流水。来源export/test-json-doc/table_fee_transactions.json分析table_fee_transactions-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.table_fee_transactions IS 'ODS 原始明细表台费流水。来源export/test-json-doc/table_fee_transactions.json分析table_fee_transactions-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1087,7 +1065,7 @@ COMMENT ON COLUMN billiards_ods.table_fee_transactions.fetched_at IS '【说明
CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements ( CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements (
siteGoodsStockId BIGINT, siteGoodsStockId BIGINT PRIMARY KEY,
tenantId BIGINT, tenantId BIGINT,
siteId BIGINT, siteId BIGINT,
siteGoodsId BIGINT, siteGoodsId BIGINT,
@@ -1106,12 +1084,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_movements (
remark TEXT, remark TEXT,
operatorName TEXT, operatorName TEXT,
createTime TIMESTAMP, createTime TIMESTAMP,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (siteGoodsStockId, content_hash)
); );
COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表商品库存变动流水。来源export/test-json-doc/goods_stock_movements.json分析goods_stock_movements-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.goods_stock_movements IS 'ODS 原始明细表商品库存变动流水。来源export/test-json-doc/goods_stock_movements.json分析goods_stock_movements-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1141,7 +1117,7 @@ COMMENT ON COLUMN billiards_ods.goods_stock_movements.payload IS '【说明】
CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree ( CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
category_name TEXT, category_name TEXT,
alias_name TEXT, alias_name TEXT,
@@ -1152,12 +1128,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.stock_goods_category_tree (
categoryBoxes JSONB, categoryBoxes JSONB,
sort INT, sort INT,
is_warehousing INT, is_warehousing INT,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表商品分类树。来源export/test-json-doc/stock_goods_category_tree.json分析stock_goods_category_tree-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.stock_goods_category_tree IS 'ODS 原始明细表商品分类树。来源export/test-json-doc/stock_goods_category_tree.json分析stock_goods_category_tree-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1179,7 +1153,7 @@ COMMENT ON COLUMN billiards_ods.stock_goods_category_tree.payload IS '【说明
CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary ( CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary (
siteGoodsId BIGINT, siteGoodsId BIGINT PRIMARY KEY,
goodsName TEXT, goodsName TEXT,
goodsUnit TEXT, goodsUnit TEXT,
goodsCategoryId BIGINT, goodsCategoryId BIGINT,
@@ -1193,12 +1167,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.goods_stock_summary (
rangeSaleMoney NUMERIC(18,2), rangeSaleMoney NUMERIC(18,2),
rangeInventory NUMERIC(18,4), rangeInventory NUMERIC(18,4),
currentStock NUMERIC(18,4), currentStock NUMERIC(18,4),
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (siteGoodsId, content_hash)
); );
COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表商品库存汇总。来源export/test-json-doc/goods_stock_summary.json分析goods_stock_summary-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.goods_stock_summary IS 'ODS 原始明细表商品库存汇总。来源export/test-json-doc/goods_stock_summary.json分析goods_stock_summary-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1223,7 +1195,7 @@ COMMENT ON COLUMN billiards_ods.goods_stock_summary.payload IS '【说明】完
CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions ( CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions (
id BIGINT, id BIGINT PRIMARY KEY,
site_id BIGINT, site_id BIGINT,
siteProfile JSONB, siteProfile JSONB,
relate_type INT, relate_type INT,
@@ -1234,12 +1206,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.payment_transactions (
create_time TIMESTAMP, create_time TIMESTAMP,
payment_method INT, payment_method INT,
online_pay_channel INT, online_pay_channel INT,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表支付流水。来源export/test-json-doc/payment_transactions.json分析payment_transactions-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.payment_transactions IS 'ODS 原始明细表支付流水。来源export/test-json-doc/payment_transactions.json分析payment_transactions-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1261,7 +1231,7 @@ COMMENT ON COLUMN billiards_ods.payment_transactions.payload IS '【说明】完
CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions ( CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
tenantName TEXT, tenantName TEXT,
site_id BIGINT, site_id BIGINT,
@@ -1293,12 +1263,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.refund_transactions (
is_delete INT, is_delete INT,
balance_frozen_amount NUMERIC(18,2), balance_frozen_amount NUMERIC(18,2),
card_frozen_amount NUMERIC(18,2), card_frozen_amount NUMERIC(18,2),
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表退款流水。来源export/test-json-doc/refund_transactions.json分析refund_transactions-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.refund_transactions IS 'ODS 原始明细表退款流水。来源export/test-json-doc/refund_transactions.json分析refund_transactions-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1341,7 +1309,7 @@ COMMENT ON COLUMN billiards_ods.refund_transactions.payload IS '【说明】完
CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records ( CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records (
id BIGINT, id BIGINT PRIMARY KEY,
verify_id BIGINT, verify_id BIGINT,
certificate_id TEXT, certificate_id TEXT,
coupon_code TEXT, coupon_code TEXT,
@@ -1367,12 +1335,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.platform_coupon_redemption_records (
operator_name TEXT, operator_name TEXT,
is_delete INT, is_delete INT,
siteProfile JSONB, siteProfile JSONB,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源export/test-json-doc/platform_coupon_redemption_records.json分析platform_coupon_redemption_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.platform_coupon_redemption_records IS 'ODS 原始明细表:平台券核销/使用记录。来源export/test-json-doc/platform_coupon_redemption_records.json分析platform_coupon_redemption_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1409,7 +1375,7 @@ COMMENT ON COLUMN billiards_ods.platform_coupon_redemption_records.payload IS '
CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master ( CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
goods_name TEXT, goods_name TEXT,
goods_bar_code TEXT, goods_bar_code TEXT,
@@ -1441,11 +1407,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.tenant_goods_master (
create_time TIMESTAMP, create_time TIMESTAMP,
update_time TIMESTAMP, update_time TIMESTAMP,
payload JSONB NOT NULL, payload JSONB NOT NULL,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now()
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表租户商品主数据。来源export/test-json-doc/tenant_goods_master.json分析tenant_goods_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.tenant_goods_master IS 'ODS 原始明细表租户商品主数据。来源export/test-json-doc/tenant_goods_master.json分析tenant_goods_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1487,7 +1451,7 @@ COMMENT ON COLUMN billiards_ods.tenant_goods_master.fetched_at IS '【说明】E
CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages ( CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages (
id BIGINT, id BIGINT PRIMARY KEY,
package_id BIGINT, package_id BIGINT,
package_name TEXT, package_name TEXT,
selling_price NUMERIC(18,2), selling_price NUMERIC(18,2),
@@ -1522,12 +1486,10 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_packages (
area_tag_type INT, area_tag_type INT,
creator_name TEXT, creator_name TEXT,
create_time TIMESTAMP, create_time TIMESTAMP,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now(),
payload JSONB NOT NULL, payload JSONB NOT NULL
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表团购套餐主数据。来源export/test-json-doc/group_buy_packages.json分析group_buy_packages-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.group_buy_packages IS 'ODS 原始明细表团购套餐主数据。来源export/test-json-doc/group_buy_packages.json分析group_buy_packages-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1573,7 +1535,7 @@ COMMENT ON COLUMN billiards_ods.group_buy_packages.payload IS '【说明】完
CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records ( CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
site_id BIGINT, site_id BIGINT,
siteName TEXT, siteName TEXT,
@@ -1617,11 +1579,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.group_buy_redemption_records (
is_delete INT, is_delete INT,
create_time TIMESTAMP, create_time TIMESTAMP,
payload JSONB NOT NULL, payload JSONB NOT NULL,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now()
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表团购核销记录。来源export/test-json-doc/group_buy_redemption_records.json分析group_buy_redemption_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.group_buy_redemption_records IS 'ODS 原始明细表团购核销记录。来源export/test-json-doc/group_buy_redemption_records.json分析group_buy_redemption_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1675,7 +1635,7 @@ COMMENT ON COLUMN billiards_ods.group_buy_redemption_records.fetched_at IS '【
CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details ( CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details (
orderSettleId BIGINT, orderSettleId BIGINT PRIMARY KEY,
actualPayment NUMERIC(18,2), actualPayment NUMERIC(18,2),
adjustAmount NUMERIC(18,2), adjustAmount NUMERIC(18,2),
assistantManualDiscount NUMERIC(18,2), assistantManualDiscount NUMERIC(18,2),
@@ -1714,11 +1674,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.settlement_ticket_details (
orderItem JSONB, orderItem JSONB,
tenantMemberCardLogs JSONB, tenantMemberCardLogs JSONB,
payload JSONB NOT NULL, payload JSONB NOT NULL,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now()
PRIMARY KEY (orderSettleId, content_hash)
); );
COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表结算小票明细。来源export/test-json-doc/settlement_ticket_details.json分析settlement_ticket_details-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.settlement_ticket_details IS 'ODS 原始明细表结算小票明细。来源export/test-json-doc/settlement_ticket_details.json分析settlement_ticket_details-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1767,7 +1725,7 @@ COMMENT ON COLUMN billiards_ods.settlement_ticket_details.fetched_at IS '【说
CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master ( CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
site_id BIGINT, site_id BIGINT,
siteName TEXT, siteName TEXT,
@@ -1813,11 +1771,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_master (
create_time TIMESTAMP, create_time TIMESTAMP,
update_time TIMESTAMP, update_time TIMESTAMP,
payload JSONB NOT NULL, payload JSONB NOT NULL,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now()
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表门店商品主数据。来源export/test-json-doc/store_goods_master.json分析store_goods_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.store_goods_master IS 'ODS 原始明细表门店商品主数据。来源export/test-json-doc/store_goods_master.json分析store_goods_master-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';
@@ -1872,7 +1828,7 @@ COMMENT ON COLUMN billiards_ods.store_goods_master.fetched_at IS '【说明】ET
CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records ( CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records (
id BIGINT, id BIGINT PRIMARY KEY,
tenant_id BIGINT, tenant_id BIGINT,
site_id BIGINT, site_id BIGINT,
siteid BIGINT, siteid BIGINT,
@@ -1924,11 +1880,9 @@ CREATE TABLE IF NOT EXISTS billiards_ods.store_goods_sales_records (
tenant_goods_category_id BIGINT, tenant_goods_category_id BIGINT,
create_time TIMESTAMP, create_time TIMESTAMP,
payload JSONB NOT NULL, payload JSONB NOT NULL,
content_hash TEXT NOT NULL,
source_file TEXT, source_file TEXT,
source_endpoint TEXT, source_endpoint TEXT,
fetched_at TIMESTAMPTZ DEFAULT now(), fetched_at TIMESTAMPTZ DEFAULT now()
PRIMARY KEY (id, content_hash)
); );
COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表门店商品销售流水。来源export/test-json-doc/store_goods_sales_records.json分析store_goods_sales_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。'; COMMENT ON TABLE billiards_ods.store_goods_sales_records IS 'ODS 原始明细表门店商品销售流水。来源export/test-json-doc/store_goods_sales_records.json分析store_goods_sales_records-Analysis.md。字段以导出原样为主ETL 补充 source_file/source_endpoint/fetched_at并保留 payload 为原始记录快照。';

View File

@@ -84,7 +84,7 @@ CREATE TABLE IF NOT EXISTS dim_site (
SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
SCD2_is_current INT DEFAULT 1, SCD2_is_current INT DEFAULT 1,
SCD2_version INT DEFAULT 1, SCD2_version INT DEFAULT 1,
PRIMARY KEY (site_id, scd2_start_time) PRIMARY KEY (site_id)
); );
COMMENT ON TABLE billiards_dwd.dim_site IS 'DWD 维度表dim_site。ODS 来源表billiards_ods.table_fee_transactions对应 JSONtable_fee_transactions.json分析table_fee_transactions-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_site IS 'DWD 维度表dim_site。ODS 来源表billiards_ods.table_fee_transactions对应 JSONtable_fee_transactions.json分析table_fee_transactions-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -133,7 +133,7 @@ CREATE TABLE IF NOT EXISTS dim_site_Ex (
SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
SCD2_is_current INT DEFAULT 1, SCD2_is_current INT DEFAULT 1,
SCD2_version INT DEFAULT 1, SCD2_version INT DEFAULT 1,
PRIMARY KEY (site_id, scd2_start_time) PRIMARY KEY (site_id)
); );
COMMENT ON TABLE billiards_dwd.dim_site_ex IS 'DWD 维度表扩展字段表dim_site_ex。ODS 来源表billiards_ods.table_fee_transactions对应 JSONtable_fee_transactions.json分析table_fee_transactions-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_site_ex IS 'DWD 维度表扩展字段表dim_site_ex。ODS 来源表billiards_ods.table_fee_transactions对应 JSONtable_fee_transactions.json分析table_fee_transactions-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -176,7 +176,7 @@ CREATE TABLE IF NOT EXISTS dim_table (
SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
SCD2_is_current INT DEFAULT 1, SCD2_is_current INT DEFAULT 1,
SCD2_version INT DEFAULT 1, SCD2_version INT DEFAULT 1,
PRIMARY KEY (table_id, scd2_start_time) PRIMARY KEY (table_id)
); );
COMMENT ON TABLE billiards_dwd.dim_table IS 'DWD 维度表dim_table。ODS 来源表billiards_ods.site_tables_master对应 JSONsite_tables_master.json分析site_tables_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_table IS 'DWD 维度表dim_table。ODS 来源表billiards_ods.site_tables_master对应 JSONsite_tables_master.json分析site_tables_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -204,7 +204,7 @@ CREATE TABLE IF NOT EXISTS dim_table_Ex (
SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31', SCD2_end_time TIMESTAMPTZ DEFAULT '9999-12-31',
SCD2_is_current INT DEFAULT 1, SCD2_is_current INT DEFAULT 1,
SCD2_version INT DEFAULT 1, SCD2_version INT DEFAULT 1,
PRIMARY KEY (table_id, scd2_start_time) PRIMARY KEY (table_id)
); );
COMMENT ON TABLE billiards_dwd.dim_table_ex IS 'DWD 维度表扩展字段表dim_table_ex。ODS 来源表billiards_ods.site_tables_master对应 JSONsite_tables_master.json分析site_tables_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_table_ex IS 'DWD 维度表扩展字段表dim_table_ex。ODS 来源表billiards_ods.site_tables_master对应 JSONsite_tables_master.json分析site_tables_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -240,7 +240,7 @@ CREATE TABLE IF NOT EXISTS dim_assistant (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (assistant_id, scd2_start_time) PRIMARY KEY (assistant_id)
); );
COMMENT ON TABLE billiards_dwd.dim_assistant IS 'DWD 维度表dim_assistant。ODS 来源表billiards_ods.assistant_accounts_master对应 JSONassistant_accounts_master.json分析assistant_accounts_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_assistant IS 'DWD 维度表dim_assistant。ODS 来源表billiards_ods.assistant_accounts_master对应 JSONassistant_accounts_master.json分析assistant_accounts_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -314,7 +314,7 @@ CREATE TABLE IF NOT EXISTS dim_assistant_Ex (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (assistant_id, scd2_start_time) PRIMARY KEY (assistant_id)
); );
COMMENT ON TABLE billiards_dwd.dim_assistant_ex IS 'DWD 维度表扩展字段表dim_assistant_ex。ODS 来源表billiards_ods.assistant_accounts_master对应 JSONassistant_accounts_master.json分析assistant_accounts_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_assistant_ex IS 'DWD 维度表扩展字段表dim_assistant_ex。ODS 来源表billiards_ods.assistant_accounts_master对应 JSONassistant_accounts_master.json分析assistant_accounts_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -383,7 +383,7 @@ CREATE TABLE IF NOT EXISTS dim_member (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (member_id, scd2_start_time) PRIMARY KEY (member_id)
); );
COMMENT ON TABLE billiards_dwd.dim_member IS 'DWD 维度表dim_member。ODS 来源表billiards_ods.member_profiles对应 JSONmember_profiles.json分析member_profiles-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_member IS 'DWD 维度表dim_member。ODS 来源表billiards_ods.member_profiles对应 JSONmember_profiles.json分析member_profiles-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -415,7 +415,7 @@ CREATE TABLE IF NOT EXISTS dim_member_Ex (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (member_id, scd2_start_time) PRIMARY KEY (member_id)
); );
COMMENT ON TABLE billiards_dwd.dim_member_ex IS 'DWD 维度表扩展字段表dim_member_ex。ODS 来源表billiards_ods.member_profiles对应 JSONmember_profiles.json分析member_profiles-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_member_ex IS 'DWD 维度表扩展字段表dim_member_ex。ODS 来源表billiards_ods.member_profiles对应 JSONmember_profiles.json分析member_profiles-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -454,7 +454,7 @@ CREATE TABLE IF NOT EXISTS dim_member_card_account (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (member_card_id, scd2_start_time) PRIMARY KEY (member_card_id)
); );
COMMENT ON TABLE billiards_dwd.dim_member_card_account IS 'DWD 维度表dim_member_card_account。ODS 来源表billiards_ods.member_stored_value_cards对应 JSONmember_stored_value_cards.json分析member_stored_value_cards-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_member_card_account IS 'DWD 维度表dim_member_card_account。ODS 来源表billiards_ods.member_stored_value_cards对应 JSONmember_stored_value_cards.json分析member_stored_value_cards-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -538,7 +538,7 @@ CREATE TABLE IF NOT EXISTS dim_member_card_account_Ex (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (member_card_id, scd2_start_time) PRIMARY KEY (member_card_id)
); );
COMMENT ON TABLE billiards_dwd.dim_member_card_account_ex IS 'DWD 维度表扩展字段表dim_member_card_account_ex。ODS 来源表billiards_ods.member_stored_value_cards对应 JSONmember_stored_value_cards.json分析member_stored_value_cards-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_member_card_account_ex IS 'DWD 维度表扩展字段表dim_member_card_account_ex。ODS 来源表billiards_ods.member_stored_value_cards对应 JSONmember_stored_value_cards.json分析member_stored_value_cards-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -619,7 +619,7 @@ CREATE TABLE IF NOT EXISTS dim_tenant_goods (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (tenant_goods_id, scd2_start_time) PRIMARY KEY (tenant_goods_id)
); );
COMMENT ON TABLE billiards_dwd.dim_tenant_goods IS 'DWD 维度表dim_tenant_goods。ODS 来源表billiards_ods.tenant_goods_master对应 JSONtenant_goods_master.json分析tenant_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_tenant_goods IS 'DWD 维度表dim_tenant_goods。ODS 来源表billiards_ods.tenant_goods_master对应 JSONtenant_goods_master.json分析tenant_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -666,7 +666,7 @@ CREATE TABLE IF NOT EXISTS dim_tenant_goods_Ex (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (tenant_goods_id, scd2_start_time) PRIMARY KEY (tenant_goods_id)
); );
COMMENT ON TABLE billiards_dwd.dim_tenant_goods_ex IS 'DWD 维度表扩展字段表dim_tenant_goods_ex。ODS 来源表billiards_ods.tenant_goods_master对应 JSONtenant_goods_master.json分析tenant_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_tenant_goods_ex IS 'DWD 维度表扩展字段表dim_tenant_goods_ex。ODS 来源表billiards_ods.tenant_goods_master对应 JSONtenant_goods_master.json分析tenant_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -719,7 +719,7 @@ CREATE TABLE IF NOT EXISTS dim_store_goods (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (site_goods_id, scd2_start_time) PRIMARY KEY (site_goods_id)
); );
COMMENT ON TABLE billiards_dwd.dim_store_goods IS 'DWD 维度表dim_store_goods。ODS 来源表billiards_ods.store_goods_master对应 JSONstore_goods_master.json分析store_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_store_goods IS 'DWD 维度表dim_store_goods。ODS 来源表billiards_ods.store_goods_master对应 JSONstore_goods_master.json分析store_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -780,7 +780,7 @@ CREATE TABLE IF NOT EXISTS dim_store_goods_Ex (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (site_goods_id, scd2_start_time) PRIMARY KEY (site_goods_id)
); );
COMMENT ON TABLE billiards_dwd.dim_store_goods_ex IS 'DWD 维度表扩展字段表dim_store_goods_ex。ODS 来源表billiards_ods.store_goods_master对应 JSONstore_goods_master.json分析store_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_store_goods_ex IS 'DWD 维度表扩展字段表dim_store_goods_ex。ODS 来源表billiards_ods.store_goods_master对应 JSONstore_goods_master.json分析store_goods_master-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -833,7 +833,7 @@ CREATE TABLE IF NOT EXISTS dim_goods_category (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (category_id, scd2_start_time) PRIMARY KEY (category_id)
); );
COMMENT ON TABLE billiards_dwd.dim_goods_category IS 'DWD 维度表dim_goods_category。ODS 来源表billiards_ods.stock_goods_category_tree对应 JSONstock_goods_category_tree.json分析stock_goods_category_tree-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_goods_category IS 'DWD 维度表dim_goods_category。ODS 来源表billiards_ods.stock_goods_category_tree对应 JSONstock_goods_category_tree.json分析stock_goods_category_tree-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -876,7 +876,7 @@ CREATE TABLE IF NOT EXISTS dim_groupbuy_package (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (groupbuy_package_id, scd2_start_time) PRIMARY KEY (groupbuy_package_id)
); );
COMMENT ON TABLE billiards_dwd.dim_groupbuy_package IS 'DWD 维度表dim_groupbuy_package。ODS 来源表billiards_ods.group_buy_packages对应 JSONgroup_buy_packages.json分析group_buy_packages-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_groupbuy_package IS 'DWD 维度表dim_groupbuy_package。ODS 来源表billiards_ods.group_buy_packages对应 JSONgroup_buy_packages.json分析group_buy_packages-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';
@@ -927,7 +927,7 @@ CREATE TABLE IF NOT EXISTS dim_groupbuy_package_Ex (
SCD2_end_time TIMESTAMPTZ, SCD2_end_time TIMESTAMPTZ,
SCD2_is_current INT, SCD2_is_current INT,
SCD2_version INT, SCD2_version INT,
PRIMARY KEY (groupbuy_package_id, scd2_start_time) PRIMARY KEY (groupbuy_package_id)
); );
COMMENT ON TABLE billiards_dwd.dim_groupbuy_package_ex IS 'DWD 维度表扩展字段表dim_groupbuy_package_ex。ODS 来源表billiards_ods.group_buy_packages对应 JSONgroup_buy_packages.json分析group_buy_packages-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask'; COMMENT ON TABLE billiards_dwd.dim_groupbuy_package_ex IS 'DWD 维度表扩展字段表dim_groupbuy_package_ex。ODS 来源表billiards_ods.group_buy_packages对应 JSONgroup_buy_packages.json分析group_buy_packages-Analysis.md。装载/清洗逻辑参考etl_billiards/tasks/dwd_load_task.pyDwdLoadTask';

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More