wedata3-feature-engineering 0.2.6.dev3__tar.gz → 0.2.6.dev4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/PKG-INFO +6 -25
  2. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/cloud_sdk_client/models.py +2 -2
  3. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/constants/constants.py +1 -1
  4. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/online_store/packed_codec.py +23 -0
  5. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/client.py +1 -1
  6. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/table_client/table_client.py +9 -9
  7. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata3_feature_engineering.egg-info/PKG-INFO +6 -25
  8. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata3_feature_engineering.egg-info/SOURCES.txt +0 -13
  9. wedata3_feature_engineering-0.2.6.dev3/tests/test_build_executor_deps.py +0 -52
  10. wedata3_feature_engineering-0.2.6.dev3/tests/test_cleanup_packed.py +0 -405
  11. wedata3_feature_engineering-0.2.6.dev3/tests/test_client.py +0 -1722
  12. wedata3_feature_engineering-0.2.6.dev3/tests/test_common_utils.py +0 -8
  13. wedata3_feature_engineering-0.2.6.dev3/tests/test_feast_client_validate_keys.py +0 -190
  14. wedata3_feature_engineering-0.2.6.dev3/tests/test_feature_spec_training_set.py +0 -313
  15. wedata3_feature_engineering-0.2.6.dev3/tests/test_feature_store.py +0 -388
  16. wedata3_feature_engineering-0.2.6.dev3/tests/test_feature_table_client_validate_keys.py +0 -192
  17. wedata3_feature_engineering-0.2.6.dev3/tests/test_packed_codec.py +0 -425
  18. wedata3_feature_engineering-0.2.6.dev3/tests/test_redis_packed.py +0 -427
  19. wedata3_feature_engineering-0.2.6.dev3/tests/test_sync_template.py +0 -289
  20. wedata3_feature_engineering-0.2.6.dev3/tests/test_table_client.py +0 -154
  21. wedata3_feature_engineering-0.2.6.dev3/tests/test_table_client_dispatch.py +0 -223
  22. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/README.md +0 -0
  23. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/setup.cfg +0 -0
  24. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/setup.py +0 -0
  25. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/__init__.py +0 -0
  26. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/__init__.py +0 -0
  27. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/base_table_client/__init__.py +0 -0
  28. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/base_table_client/base.py +0 -0
  29. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/cloud_sdk_client/__init__.py +0 -0
  30. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/cloud_sdk_client/client.py +0 -0
  31. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/cloud_sdk_client/utils.py +0 -0
  32. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/constants/__init__.py +0 -0
  33. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/constants/engine_types.py +0 -0
  34. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/__init__.py +0 -0
  35. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/column_info.py +0 -0
  36. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/environment_variables.py +0 -0
  37. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature.py +0 -0
  38. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature_column_info.py +0 -0
  39. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature_function.py +0 -0
  40. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature_lookup.py +0 -0
  41. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature_spec.py +0 -0
  42. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature_spec_constants.py +0 -0
  43. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature_table.py +0 -0
  44. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/feature_table_info.py +0 -0
  45. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/function_info.py +0 -0
  46. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/on_demand_column_info.py +0 -0
  47. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/source_data_column_info.py +0 -0
  48. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/entities/training_set.py +0 -0
  49. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/feast_client/__init__.py +0 -0
  50. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/feast_client/feast_client.py +0 -0
  51. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/log/__init__.py +0 -0
  52. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/log/logger.py +0 -0
  53. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/online_store/__init__.py +0 -0
  54. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/protos/__init__.py +0 -0
  55. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/protos/feature_store_pb2.py +0 -0
  56. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/spark_client/__init__.py +0 -0
  57. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/spark_client/spark_client.py +0 -0
  58. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/__init__.py +0 -0
  59. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/common_utils.py +0 -0
  60. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/env_utils.py +0 -0
  61. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/feature_lookup_utils.py +0 -0
  62. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/feature_spec_utils.py +0 -0
  63. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/feature_utils.py +0 -0
  64. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/on_demand_utils.py +0 -0
  65. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/schema_utils.py +0 -0
  66. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/signature_utils.py +0 -0
  67. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/topological_sort.py +0 -0
  68. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/training_set_utils.py +0 -0
  69. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/uc_utils.py +0 -0
  70. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/common/utils/validation_utils.py +0 -0
  71. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/__init__.py +0 -0
  72. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/feast/__init__.py +0 -0
  73. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/feast/infra/__init__.py +0 -0
  74. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/feast/infra/online_store/__init__.py +0 -0
  75. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/feast/infra/online_store/cleanup_packed.py +0 -0
  76. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/feast/infra/online_store/postgres.py +0 -0
  77. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/feast/infra/online_store/redis_packed.py +0 -0
  78. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/ml_training_client/__init__.py +0 -0
  79. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/ml_training_client/ml_training_client.py +0 -0
  80. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/mlflow_model.py +0 -0
  81. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_engineering/table_client/__init__.py +0 -0
  82. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/__init__.py +0 -0
  83. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/client.py +0 -0
  84. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/common/__init__.py +0 -0
  85. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/common/store_config/__init__.py +0 -0
  86. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/common/store_config/redis.py +0 -0
  87. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/constants/__init__.py +0 -0
  88. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/constants/engine_types.py +0 -0
  89. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/feature_table_client/__init__.py +0 -0
  90. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/feature_table_client/feature_table_client.py +0 -0
  91. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/mlflow_model.py +0 -0
  92. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/training_set_client/__init__.py +0 -0
  93. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/feature_store/training_set_client/training_set_client.py +0 -0
  94. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/__init__.py +0 -0
  95. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/interpol.py +0 -0
  96. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/intervals.py +0 -0
  97. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/io.py +0 -0
  98. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/ml.py +0 -0
  99. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/resample.py +0 -0
  100. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/tsdf.py +0 -0
  101. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata/tempo/utils.py +0 -0
  102. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata3_feature_engineering.egg-info/dependency_links.txt +0 -0
  103. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata3_feature_engineering.egg-info/requires.txt +0 -0
  104. {wedata3_feature_engineering-0.2.6.dev3 → wedata3-feature-engineering-0.2.6.dev4}/wedata3_feature_engineering.egg-info/top_level.txt +0 -0
@@ -1,41 +1,20 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: wedata3-feature-engineering
3
- Version: 0.2.6.dev3
3
+ Version: 0.2.6.dev4
4
4
  Summary: Wedata Feature Engineering Library Development
5
- Home-page:
5
+ Home-page: UNKNOWN
6
6
  Author: meahqian
7
7
  Author-email:
8
8
  License: Apache 2.0
9
+ Platform: UNKNOWN
9
10
  Classifier: Programming Language :: Python :: 3
10
11
  Classifier: License :: OSI Approved :: Apache Software License
11
12
  Classifier: Operating System :: OS Independent
12
13
  Requires-Python: >=3.10
13
14
  Description-Content-Type: text/markdown
14
- Requires-Dist: pandas>=1.0.0
15
- Requires-Dist: feast[postgres,redis]==0.49.0
16
- Requires-Dist: grpcio==1.74.0
17
- Requires-Dist: msgpack<2,>=1.0
18
- Requires-Dist: tencentcloud-sdk-python
19
- Requires-Dist: ipython
20
- Requires-Dist: msgpack<2.0.0,>=1.0.0
21
15
  Provides-Extra: mlflow2
22
- Requires-Dist: mlflow==2.17.2; extra == "mlflow2"
23
16
  Provides-Extra: mlflow3
24
- Requires-Dist: mlflow<3.11.0,>=3.10.0; extra == "mlflow3"
25
17
  Provides-Extra: dev
26
- Requires-Dist: flake8; extra == "dev"
27
- Requires-Dist: pytest; extra == "dev"
28
- Requires-Dist: python-dotenv; extra == "dev"
29
- Requires-Dist: fakeredis[lua]; extra == "dev"
30
- Dynamic: author
31
- Dynamic: classifier
32
- Dynamic: description
33
- Dynamic: description-content-type
34
- Dynamic: license
35
- Dynamic: provides-extra
36
- Dynamic: requires-dist
37
- Dynamic: requires-python
38
- Dynamic: summary
39
18
 
40
19
  # wedata3-feature-engineering
41
20
 
@@ -160,3 +139,5 @@ bash build.sh
160
139
  ## 许可证
161
140
 
162
141
  Apache License 2.0
142
+
143
+
@@ -1184,7 +1184,7 @@ class CreateOnlineTableRequest(AbstractModel):
1184
1184
  TargetPath: 目标路径
1185
1185
  OfflineFeatureConfiguration: 离线表信息
1186
1186
  TaskSchedulerConfiguration: 任务调度配置
1187
- OnlineStoreType: 在线存储类型(TENCENT_POSTGRESQL | REDIS,缺省 TENCENT_POSTGRESQL 保证旧调用方兼容)
1187
+ OnlineStoreType: 在线存储类型(TENCENT_POSTGRE | REDIS,缺省 TENCENT_POSTGRE)
1188
1188
  """
1189
1189
 
1190
1190
  def __init__(self) -> None:
@@ -1351,7 +1351,7 @@ class DeleteOnlineTableRequest(AbstractModel):
1351
1351
  WorkspaceId: 工作空间ID
1352
1352
  TableNameInfo: 表信息
1353
1353
  ResourceGroupId: 资源组ID
1354
- OnlineStoreType: 在线存储类型(TENCENT_POSTGRESQL | REDIS,缺省 TENCENT_POSTGRESQL 保证旧调用方兼容)
1354
+ OnlineStoreType: 在线存储类型(TENCENT_POSTGRE | REDIS,缺省 TENCENT_POSTGRE)
1355
1355
  """
1356
1356
  def __init__(self) -> None:
1357
1357
  self._WorkspaceId = None
@@ -46,7 +46,7 @@ FEATURE_LOOKUP_CLIENT_PIP_PACKAGE = "wedata3-feature-engineering"
46
46
  # 特征查找版本号
47
47
  # FEATURE_LOOKUP_CLIENT_MAJOR_VERSION = "0.6.16"
48
48
  # FEATURE_LOOKUP_CLIENT_PIP_PACKAGE_VERSION = f"{FEATURE_LOOKUP_CLIENT_PIP_PACKAGE}>=0.6.16"
49
- FEATURE_LOOKUP_CLIENT_MAJOR_VERSION = "0.2.6.dev3"
49
+ FEATURE_LOOKUP_CLIENT_MAJOR_VERSION = "0.2.6.dev4"
50
50
  FEATURE_LOOKUP_CLIENT_PIP_PACKAGE_VERSION = f"{FEATURE_LOOKUP_CLIENT_PIP_PACKAGE}>=0.2.4"
51
51
 
52
52
  # 特征存储内部数据目录
@@ -50,6 +50,29 @@ _DATA_VERSION_RAND_LEN = 2
50
50
  _OVERSIZE_WARNED: set = set()
51
51
 
52
52
 
53
+ def _check_msgpack_impl() -> None:
54
+ """检测 msgpack 是否走 C 扩展实现(方案 D3.1.1 落地约束:防静默降级)。
55
+
56
+ zipimport 等场景下 msgpack 会静默退回纯 Python 实现,5 亿行同步慢数十倍。
57
+ Executor 上通过 ``spark.executorEnv.PYTHONPATH=./deps`` 分发的归档若平台 ABI
58
+ 不匹配即触发该情况,必须在运行时告警而不是等同步超时才发现。
59
+ """
60
+ try:
61
+ import msgpack
62
+
63
+ if "fallback" in str(msgpack.Packer):
64
+ logger.warning(
65
+ "msgpack is running in PURE-PYTHON fallback mode (C extension not loaded); "
66
+ "redis packed sync will be extremely slow. Check that the executor deps archive "
67
+ "matches the executor platform/ABI (see scripts/build_executor_deps.sh)."
68
+ )
69
+ except Exception: # pragma: no cover - 检测本身不允许影响主流程
70
+ logger.warning("msgpack implementation check skipped (import failed)", exc_info=True)
71
+
72
+
73
+ _check_msgpack_impl()
74
+
75
+
53
76
  class PackedCodecError(ValueError):
54
77
  """编解码层的显式失败(对应 codec 设计 §8 的 F2/F3/F8 等)。"""
55
78
 
@@ -1095,7 +1095,7 @@ class FeatureEngineeringClient:
1095
1095
  由用户根据所在工作空间已配置的在线 catalog 显式指定(如 `DataLakeCatalog`),
1096
1096
  SDK 不提供默认兜底以避免在多 catalog 场景下静默连接错误的 PG 实例。Redis 不传
1097
1097
  trigger: [可选]周期性任务的调度配置
1098
- online_store_type: [可选]"TENCENT_POSTGRESQL"(默认)或 "REDIS"。Redis 在线表由离线表与
1098
+ online_store_type: [可选]"TENCENT_POSTGRE"(默认)或 "REDIS"。Redis 在线表由离线表与
1099
1099
  工作空间的 Redis 数据源确定,不需要也不接受在线库表名
1100
1100
  """
1101
1101
  kwargs = {}
@@ -813,7 +813,7 @@ class FeatureEngineeringTableClient(AbstractBaseTableClient):
813
813
  Properties 中没有 connectionId,则降级走 TCCatalog 模式。常见取值如 `DataLakeCatalog`,
814
814
  具体需结合所在工作空间已配置的在线 catalog 决定,禁止由 SDK 默认兜底。Redis 不传
815
815
  trigger: [可选]周期性任务的调度配置
816
- online_store_type: [可选]在线存储类型,"TENCENT_POSTGRESQL"(默认,向后兼容)或 "REDIS"。
816
+ online_store_type: [可选]在线存储类型,"TENCENT_POSTGRE"(默认)或 "REDIS"。
817
817
  传 "REDIS" 时:在线表由离线表与 Redis 数据源确定,不需要在线库表名(传了即报错);
818
818
  不支持持续同步(trigger 的 TriggerMode=CONTINUE_RUN 即报错),只支持 SNAPSHOT / TIME_TRIGGER;
819
819
  同一离线表只能发布到 PG 或 Redis 其中一种(服务端校验);
@@ -830,11 +830,11 @@ class FeatureEngineeringTableClient(AbstractBaseTableClient):
830
830
  """
831
831
  # store 类型分派(不传 = PG,行为与历史版本完全一致)
832
832
  if online_store_type is None:
833
- online_store_type = "TENCENT_POSTGRESQL"
833
+ online_store_type = "TENCENT_POSTGRE"
834
834
  online_store_type = online_store_type.upper()
835
- if online_store_type not in ("TENCENT_POSTGRESQL", "REDIS"):
835
+ if online_store_type not in ("TENCENT_POSTGRE", "REDIS"):
836
836
  raise ValueError(
837
- f"online_store_type must be 'TENCENT_POSTGRESQL' or 'REDIS', got {online_store_type!r}"
837
+ f"online_store_type must be 'TENCENT_POSTGRE' or 'REDIS', got {online_store_type!r}"
838
838
  )
839
839
  online_names = {
840
840
  "online_db_name": online_db_name,
@@ -868,12 +868,12 @@ class FeatureEngineeringTableClient(AbstractBaseTableClient):
868
868
  ]
869
869
  if given_redis:
870
870
  raise ValueError(
871
- f"{', '.join(given_redis)} must not be set for TENCENT_POSTGRESQL: "
871
+ f"{', '.join(given_redis)} must not be set for TENCENT_POSTGRE: "
872
872
  f"the PG connection is resolved from online_catalog_name on the server side"
873
873
  )
874
874
  missing = [k for k, v in online_names.items() if not v]
875
875
  if missing:
876
- raise ValueError(f"{', '.join(missing)} is required for TENCENT_POSTGRESQL online table")
876
+ raise ValueError(f"{', '.join(missing)} is required for TENCENT_POSTGRE online table")
877
877
 
878
878
  # 构建完整表名
879
879
  full_table_name = common_utils.build_full_table_name(table_name, schema_name, catalog_name, self._spark)
@@ -1037,16 +1037,16 @@ class FeatureEngineeringTableClient(AbstractBaseTableClient):
1037
1037
  catalog_name: 数据目录名称
1038
1038
  schema_name: 数据库名称
1039
1039
  table_name: 表名
1040
- online_store_type: [可选]在线存储类型,"TENCENT_POSTGRESQL" 或 "REDIS"。不传时由服务端按标签判定;
1040
+ online_store_type: [可选]在线存储类型,"TENCENT_POSTGRE" 或 "REDIS"。不传时由服务端按标签判定;
1041
1041
  传了也以标签为准(不一致时服务端告警)。
1042
1042
  Raises:
1043
1043
  RuntimeError: 当删除操作失败时抛出
1044
1044
  """
1045
1045
  if online_store_type is not None:
1046
1046
  online_store_type = online_store_type.upper()
1047
- if online_store_type not in ("TENCENT_POSTGRESQL", "REDIS"):
1047
+ if online_store_type not in ("TENCENT_POSTGRE", "REDIS"):
1048
1048
  raise ValueError(
1049
- f"online_store_type must be 'TENCENT_POSTGRESQL' or 'REDIS', got {online_store_type!r}"
1049
+ f"online_store_type must be 'TENCENT_POSTGRE' or 'REDIS', got {online_store_type!r}"
1050
1050
  )
1051
1051
 
1052
1052
  # 接口分页参数
@@ -1,41 +1,20 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: wedata3-feature-engineering
3
- Version: 0.2.6.dev3
3
+ Version: 0.2.6.dev4
4
4
  Summary: Wedata Feature Engineering Library Development
5
- Home-page:
5
+ Home-page: UNKNOWN
6
6
  Author: meahqian
7
7
  Author-email:
8
8
  License: Apache 2.0
9
+ Platform: UNKNOWN
9
10
  Classifier: Programming Language :: Python :: 3
10
11
  Classifier: License :: OSI Approved :: Apache Software License
11
12
  Classifier: Operating System :: OS Independent
12
13
  Requires-Python: >=3.10
13
14
  Description-Content-Type: text/markdown
14
- Requires-Dist: pandas>=1.0.0
15
- Requires-Dist: feast[postgres,redis]==0.49.0
16
- Requires-Dist: grpcio==1.74.0
17
- Requires-Dist: msgpack<2,>=1.0
18
- Requires-Dist: tencentcloud-sdk-python
19
- Requires-Dist: ipython
20
- Requires-Dist: msgpack<2.0.0,>=1.0.0
21
15
  Provides-Extra: mlflow2
22
- Requires-Dist: mlflow==2.17.2; extra == "mlflow2"
23
16
  Provides-Extra: mlflow3
24
- Requires-Dist: mlflow<3.11.0,>=3.10.0; extra == "mlflow3"
25
17
  Provides-Extra: dev
26
- Requires-Dist: flake8; extra == "dev"
27
- Requires-Dist: pytest; extra == "dev"
28
- Requires-Dist: python-dotenv; extra == "dev"
29
- Requires-Dist: fakeredis[lua]; extra == "dev"
30
- Dynamic: author
31
- Dynamic: classifier
32
- Dynamic: description
33
- Dynamic: description-content-type
34
- Dynamic: license
35
- Dynamic: provides-extra
36
- Dynamic: requires-dist
37
- Dynamic: requires-python
38
- Dynamic: summary
39
18
 
40
19
  # wedata3-feature-engineering
41
20
 
@@ -160,3 +139,5 @@ bash build.sh
160
139
  ## 许可证
161
140
 
162
141
  Apache License 2.0
142
+
143
+
@@ -1,18 +1,5 @@
1
1
  README.md
2
2
  setup.py
3
- tests/test_build_executor_deps.py
4
- tests/test_cleanup_packed.py
5
- tests/test_client.py
6
- tests/test_common_utils.py
7
- tests/test_feast_client_validate_keys.py
8
- tests/test_feature_spec_training_set.py
9
- tests/test_feature_store.py
10
- tests/test_feature_table_client_validate_keys.py
11
- tests/test_packed_codec.py
12
- tests/test_redis_packed.py
13
- tests/test_sync_template.py
14
- tests/test_table_client.py
15
- tests/test_table_client_dispatch.py
16
3
  wedata/__init__.py
17
4
  wedata/common/__init__.py
18
5
  wedata/common/base_table_client/__init__.py
@@ -1,52 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- scripts/build_executor_deps.sh 的静态检查(实跑需要 Linux x86_64 + 网络,放在发布流程里做)。
4
-
5
- 曾经的三个问题,任何一个都会让打出来的包在 Executor 上不可用:
6
- 1. 包名写成 tencent-wedata-feature-engineering,与 setup.py 不一致,pip 装不到;
7
- 2. --python-version 39 与 python_requires>=3.10 冲突,pip 拒装;
8
- 3. tar 打了外层 deps 目录,按 #deps 解压后变成 ./deps/deps/wedata,PYTHONPATH=./deps 找不到。
9
- """
10
-
11
- import re
12
- from pathlib import Path
13
-
14
- ROOT = Path(__file__).resolve().parents[1]
15
- SCRIPT = (ROOT / "scripts" / "build_executor_deps.sh").read_text(encoding="utf-8")
16
-
17
-
18
- def _setup_value(key: str) -> str:
19
- match = re.search(rf"{key}\s*=\s*['\"]([^'\"]+)['\"]", (ROOT / "setup.py").read_text(encoding="utf-8"))
20
- assert match, f"setup.py 中找不到 {key}"
21
- return match.group(1)
22
-
23
-
24
- def test_package_name_matches_setup_py():
25
- assert f'SDK_PACKAGE="{_setup_value("name")}"' in SCRIPT
26
- assert "tencent-wedata-feature-engineering" not in SCRIPT
27
-
28
-
29
- def test_default_sdk_version_matches_constants():
30
- from wedata.common.constants.constants import FEATURE_LOOKUP_CLIENT_MAJOR_VERSION
31
-
32
- assert f'SDK_VERSION="${{SDK_VERSION:-{FEATURE_LOOKUP_CLIENT_MAJOR_VERSION}}}"' in SCRIPT
33
-
34
-
35
- def test_target_python_satisfies_python_requires():
36
- required = _setup_value("python_requires")
37
- minimum = tuple(int(x) for x in required.lstrip(">=").split("."))
38
- default = re.search(r'PY_VERSION="\$\{PY_VERSION:-([\d.]+)\}"', SCRIPT).group(1)
39
- assert tuple(int(x) for x in default.split(".")) >= minimum
40
- assert '--python-version "$PY_VERSION"' in SCRIPT
41
-
42
-
43
- def test_archive_root_is_package_dir():
44
- """归档里不能再套一层 deps:Spark 按 #deps 解压,PYTHONPATH=./deps 下要直接看到 wedata / msgpack。"""
45
- assert 'tar -czf "${OUT_DIR}/${ARCHIVE_NAME}" -C "$STAGE_DIR/deps" .' in SCRIPT
46
- assert not re.search(r'-C "\$STAGE_DIR" deps', SCRIPT)
47
-
48
-
49
- def test_no_invalid_spark_conf_and_no_shasum():
50
- code = "\n".join(line for line in SCRIPT.splitlines() if not line.lstrip().startswith("#"))
51
- assert "spark.driverEnv" not in code # 不是 Spark 配置项
52
- assert not re.search(r"\b(shasum|sha256sum)\s", code) # slim 镜像不一定有