goe-framework 1.0.7__tar.gz → 1.0.8.dev0__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 (239) hide show
  1. {goe_framework-1.0.7/src/goe_framework.egg-info → goe_framework-1.0.8.dev0}/PKG-INFO +3 -2
  2. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/pyproject.toml +1 -1
  3. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/config/orchestration_config.py +0 -2
  4. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/config/orchestration_defaults.py +0 -4
  5. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/connect/connect.py +0 -14
  6. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/goe.py +14 -8
  7. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/backend_api.py +0 -82
  8. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/backend_table.py +3 -32
  9. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/bigquery/bigquery_backend_api.py +2 -82
  10. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/bigquery/bigquery_backend_table.py +0 -10
  11. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/offload_transport_factory.py +0 -9
  12. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/frontend_api.py +7 -13
  13. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/hadoop_backend_api.py +1 -190
  14. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/hadoop_backend_table.py +0 -31
  15. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/hive_backend_api.py +1 -161
  16. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/hive_backend_table.py +13 -10
  17. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/impala_backend_api.py +1 -431
  18. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/impala_backend_table.py +0 -7
  19. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/sqoop_offload_transport.py +0 -4
  20. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/mssql_frontend_api.py +7 -2
  21. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/mssql_offload_source_table.py +1 -7
  22. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/mssql_offload_transport_rdbms_api.py +5 -5
  23. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/synapse_backend_api.py +0 -74
  24. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/synapse_backend_table.py +0 -6
  25. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload.py +8 -0
  26. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_constants.py +0 -63
  27. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_source_table.py +3 -7
  28. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_transport.py +26 -18
  29. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_transport_rdbms_api.py +3 -3
  30. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/data_type_controls.py +3 -14
  31. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/partition_controls.py +6 -10
  32. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/sort_columns.py +2 -0
  33. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/oracle/oracle_frontend_api.py +7 -2
  34. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/oracle/oracle_offload_source_table.py +1 -30
  35. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/oracle/oracle_offload_transport_rdbms_api.py +15 -36
  36. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/snowflake/snowflake_backend_api.py +0 -80
  37. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/snowflake/snowflake_backend_table.py +0 -6
  38. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/spark/dataproc_offload_transport.py +0 -2
  39. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/spark/livy_offload_transport.py +0 -2
  40. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/teradata_frontend_api.py +5 -2
  41. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/teradata_offload_source_table.py +1 -6
  42. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/teradata_offload_transport_rdbms_api.py +6 -6
  43. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0/src/goe_framework.egg-info}/PKG-INFO +3 -2
  44. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/AUTHORS +0 -0
  45. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/LICENSE +0 -0
  46. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/README.md +0 -0
  47. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/setup.cfg +0 -0
  48. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/__init__.py +0 -0
  49. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/conductor/__init__.py +0 -0
  50. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/conductor/hybrid_view_service.py +0 -0
  51. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/config/__init__.py +0 -0
  52. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/config/config_file.py +0 -0
  53. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/config/config_validation_functions.py +0 -0
  54. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/config/option_descriptions.py +0 -0
  55. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/connect/__init__.py +0 -0
  56. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/connect/connect_backend.py +0 -0
  57. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/connect/connect_constants.py +0 -0
  58. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/connect/connect_frontend.py +0 -0
  59. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/connect/connect_functions.py +0 -0
  60. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/connect/connect_transport.py +0 -0
  61. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/exceptions.py +0 -0
  62. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/__init__.py +0 -0
  63. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/cli_hdfs.py +0 -0
  64. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/goe_azure.py +0 -0
  65. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/goe_dfs.py +0 -0
  66. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/goe_dfs_factory.py +0 -0
  67. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/goe_gcs.py +0 -0
  68. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/goe_s3.py +0 -0
  69. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/filesystem/web_hdfs.py +0 -0
  70. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/__init__.py +0 -0
  71. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/__main__.py +0 -0
  72. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/api/__init__.py +0 -0
  73. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/api/routes/__init__.py +0 -0
  74. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/api/routes/docs.py +0 -0
  75. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/api/routes/orchestration.py +0 -0
  76. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/api/routes/system.py +0 -0
  77. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/asgi.py +0 -0
  78. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/config/__init__.py +0 -0
  79. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/config/application.py +0 -0
  80. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/config/gunicorn.conf.py +0 -0
  81. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/config/logging.py +0 -0
  82. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/config/router.py +0 -0
  83. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/__init__.py +0 -0
  84. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/enum.py +0 -0
  85. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/events.py +0 -0
  86. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/middleware/__init__.py +0 -0
  87. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/middleware/compression.py +0 -0
  88. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/middleware/cors.py +0 -0
  89. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/middleware/secure_headers.py +0 -0
  90. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/security.py +0 -0
  91. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/core/worker.py +0 -0
  92. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/exceptions/__init__.py +0 -0
  93. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/exceptions/base.py +0 -0
  94. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/exceptions/errors.py +0 -0
  95. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/heartbeat.py +0 -0
  96. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/prestart.py +0 -0
  97. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/schemas/__init__.py +0 -0
  98. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/schemas/base.py +0 -0
  99. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/schemas/error.py +0 -0
  100. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/schemas/generics.py +0 -0
  101. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/schemas/orchestration.py +0 -0
  102. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/schemas/system.py +0 -0
  103. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/services/__init__.py +0 -0
  104. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/services/heartbeat.py +0 -0
  105. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/services/hybrid_view.py +0 -0
  106. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/services/orchestrate.py +0 -0
  107. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/services/periodic_tasks.py +0 -0
  108. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/services/system.py +0 -0
  109. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/utils/__init__.py +0 -0
  110. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/utils/cache.py +0 -0
  111. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/utils/group_by.py +0 -0
  112. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/utils/orchestrate.py +0 -0
  113. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/utils/ping.py +0 -0
  114. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/utils/system.py +0 -0
  115. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/worker.py +0 -0
  116. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/listener/wsgi.py +0 -0
  117. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/__init__.py +0 -0
  118. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/bigquery/__init__.py +0 -0
  119. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/bigquery/bigquery_column.py +0 -0
  120. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/bigquery/bigquery_literal.py +0 -0
  121. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/bigquery/bigquery_predicate.py +0 -0
  122. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/column_metadata.py +0 -0
  123. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/__init__.py +0 -0
  124. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/backend_api_factory.py +0 -0
  125. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/backend_table_factory.py +0 -0
  126. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/frontend_api_factory.py +0 -0
  127. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/offload_source_table_factory.py +0 -0
  128. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/offload_transport_rdbms_api_factory.py +0 -0
  129. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/query_import_factory.py +0 -0
  130. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/factory/staging_file_factory.py +0 -0
  131. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/format_literal.py +0 -0
  132. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/__init__.py +0 -0
  133. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/hadoop_column.py +0 -0
  134. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/hadoop_predicate.py +0 -0
  135. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/hive_literal.py +0 -0
  136. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/hadoop/impala_literal.py +0 -0
  137. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/__init__.py +0 -0
  138. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/mssql_column.py +0 -0
  139. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/synapse_column.py +0 -0
  140. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/synapse_constants.py +0 -0
  141. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/synapse_literal.py +0 -0
  142. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/microsoft/synapse_predicate.py +0 -0
  143. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_functions.py +0 -0
  144. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_messages.py +0 -0
  145. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_metadata_functions.py +0 -0
  146. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_source_data.py +0 -0
  147. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_status_report.py +0 -0
  148. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_transport_functions.py +0 -0
  149. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_validation.py +0 -0
  150. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/offload_xform_functions.py +0 -0
  151. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/__init__.py +0 -0
  152. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/ddl_file.py +0 -0
  153. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/not_null_columns.py +0 -0
  154. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/stats_controls.py +0 -0
  155. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/table_structure_checks.py +0 -0
  156. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/operation/transport.py +0 -0
  157. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/option_validation.py +0 -0
  158. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/oracle/__init__.py +0 -0
  159. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/oracle/oracle_column.py +0 -0
  160. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/oracle/oracle_literal.py +0 -0
  161. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/oracle/oracle_predicate.py +0 -0
  162. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/predicate_offload.py +0 -0
  163. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/query_import_interface.py +0 -0
  164. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/snowflake/__init__.py +0 -0
  165. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/snowflake/snowflake_column.py +0 -0
  166. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/snowflake/snowflake_literal.py +0 -0
  167. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/snowflake/snowflake_predicate.py +0 -0
  168. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/spark/__init__.py +0 -0
  169. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/spark/offload_transport_livy_requests.py +0 -0
  170. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/spark/pyspark_literal.py +0 -0
  171. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/spark/spark_thrift_backend_api.py +0 -0
  172. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/__init__.py +0 -0
  173. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/avro/__init__.py +0 -0
  174. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/avro/avro_column.py +0 -0
  175. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/avro/avro_staging_file.py +0 -0
  176. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/parquet/__init__.py +0 -0
  177. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/parquet/parquet_column.py +0 -0
  178. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/parquet/parquet_staging_file.py +0 -0
  179. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/staging/staging_file.py +0 -0
  180. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/synthetic_partition_literal.py +0 -0
  181. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/__init__.py +0 -0
  182. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/teradata_column.py +0 -0
  183. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/teradata_literal.py +0 -0
  184. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/teradata_partition_expression.py +0 -0
  185. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/offload/teradata/teradata_predicate.py +0 -0
  186. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/orchestration/__init__.py +0 -0
  187. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/orchestration/cli_entry_points.py +0 -0
  188. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/orchestration/command_steps.py +0 -0
  189. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/orchestration/execution_id.py +0 -0
  190. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/orchestration/orchestration_constants.py +0 -0
  191. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/orchestration/orchestration_lock.py +0 -0
  192. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/orchestration/orchestration_runner.py +0 -0
  193. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/__init__.py +0 -0
  194. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/factory/__init__.py +0 -0
  195. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/factory/orchestration_repo_client_factory.py +0 -0
  196. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/oracle/__init__.py +0 -0
  197. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/oracle/oracle_orchestration_repo_client.py +0 -0
  198. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/orchestration_metadata.py +0 -0
  199. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/orchestration_repo_client.py +0 -0
  200. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/teradata/__init__.py +0 -0
  201. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/persistence/teradata/teradata_orchestration_repo_client.py +0 -0
  202. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/__init__.py +0 -0
  203. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/schema_sync.py +0 -0
  204. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/schema_sync_analyzer.py +0 -0
  205. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/schema_sync_command_file.py +0 -0
  206. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/schema_sync_constants.py +0 -0
  207. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/schema_sync_processor.py +0 -0
  208. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/schema_sync_step.py +0 -0
  209. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/steps/__init__.py +0 -0
  210. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/steps/add_backend_column.py +0 -0
  211. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/steps/add_oracle_column.py +0 -0
  212. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/schema_sync/steps/step_builder.py +0 -0
  213. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/scripts/__init__.py +0 -0
  214. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/scripts/agg_validate.py +0 -0
  215. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/__init__.py +0 -0
  216. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/avro_encoder.py +0 -0
  217. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/better_impyla.py +0 -0
  218. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/exception_trigger.py +0 -0
  219. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/goe_log.py +0 -0
  220. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/goe_log_fh.py +0 -0
  221. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/goe_version.py +0 -0
  222. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/hive_ddl_transform.py +0 -0
  223. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/hive_table_stats.py +0 -0
  224. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/hs2_connection.py +0 -0
  225. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/json_tools.py +0 -0
  226. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/local_cache.py +0 -0
  227. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/misc_functions.py +0 -0
  228. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/ora_query.py +0 -0
  229. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/parallel_exec.py +0 -0
  230. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/parquet_encoder.py +0 -0
  231. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/password_tools.py +0 -0
  232. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/polling_thread.py +0 -0
  233. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/redis_tools.py +0 -0
  234. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/retry_logic.py +0 -0
  235. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe/util/simple_timer.py +0 -0
  236. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe_framework.egg-info/SOURCES.txt +0 -0
  237. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe_framework.egg-info/dependency_links.txt +0 -0
  238. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe_framework.egg-info/requires.txt +0 -0
  239. {goe_framework-1.0.7 → goe_framework-1.0.8.dev0}/src/goe_framework.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: goe-framework
3
- Version: 1.0.7
3
+ Version: 1.0.8.dev0
4
4
  Maintainer-email: Neil Johnson <neiljohnson@google.com>
5
5
  Project-URL: Homepage, https://github.com/gluent/goe
6
6
  Project-URL: Issues, https://github.com/gluent/goe/issues
@@ -67,6 +67,7 @@ Provides-Extra: test
67
67
  Requires-Dist: nox; extra == "test"
68
68
  Requires-Dist: pytest; extra == "test"
69
69
  Requires-Dist: pytest-xdist; extra == "test"
70
+ Dynamic: license-file
70
71
 
71
72
  # GOE
72
73
  A simple and flexible way to copy data from an Oracle Database to Google BigQuery.
@@ -14,7 +14,7 @@
14
14
 
15
15
  [project]
16
16
  name = "goe-framework"
17
- version = "1.0.7"
17
+ version = "1.0.8.dev0"
18
18
  readme = "README.md"
19
19
  requires-python = ">=3.7"
20
20
  maintainers = [
@@ -199,7 +199,6 @@ EXPECTED_CONFIG_ARGS = [
199
199
  "teradata_app_pass",
200
200
  "teradata_server",
201
201
  "teradata_repo_user",
202
- "udf_db",
203
202
  "use_ssl",
204
203
  "use_oracle_wallet",
205
204
  "webhdfs_host",
@@ -825,7 +824,6 @@ class OrchestrationConfig:
825
824
  "teradata_repo_user",
826
825
  orchestration_defaults.teradata_repo_user_default(),
827
826
  ),
828
- udf_db=config_dict.get("udf_db", orchestration_defaults.udf_db_default()),
829
827
  use_ssl=config_dict.get(
830
828
  "use_ssl", orchestration_defaults.use_ssl_default()
831
829
  ),
@@ -476,10 +476,6 @@ def ldap_password_file_default():
476
476
  return os.environ.get("HIVE_SERVER_LDAP_PASSWORD_FILE")
477
477
 
478
478
 
479
- def udf_db_default():
480
- return os.environ.get("OFFLOAD_UDF_DB")
481
-
482
-
483
479
  def use_ssl_default():
484
480
  return bool(os.environ.get("SSL_ACTIVE", "").lower() == "true" or ca_cert_default())
485
481
 
@@ -486,20 +486,6 @@ def get_connect_opts():
486
486
  help="Adds missing configuration variables from the environment file template to the environment file",
487
487
  )
488
488
  # Hidden options to keep TeamCity testing functioning
489
- opt.add_option(
490
- "--validate-udfs",
491
- dest="validate_udfs",
492
- default=False,
493
- action="store_true",
494
- help=SUPPRESS_HELP,
495
- )
496
- opt.add_option(
497
- "--install-udfs",
498
- dest="install_udfs",
499
- default=False,
500
- action="store_true",
501
- help=SUPPRESS_HELP,
502
- )
503
489
  opt.add_option(
504
490
  "--create-backend-db",
505
491
  dest="create_backend_db",
@@ -220,7 +220,6 @@ EXPECTED_OFFLOAD_ARGS = [
220
220
  "offload_predicate_modify_hybrid_view",
221
221
  "offload_stats_method",
222
222
  "offload_transport_method",
223
- "offload_type",
224
223
  "offload_transport_consistent_read",
225
224
  "offload_transport_dsn",
226
225
  "offload_transport_fetch_size",
@@ -228,8 +227,10 @@ EXPECTED_OFFLOAD_ARGS = [
228
227
  "offload_transport_queue_name",
229
228
  "offload_transport_parallelism",
230
229
  "offload_transport_small_table_threshold",
230
+ "offload_transport_snapshot",
231
231
  "offload_transport_spark_properties",
232
232
  "offload_transport_validation_polling_interval",
233
+ "offload_type",
233
234
  "older_than_date",
234
235
  "older_than_days",
235
236
  "operation_name",
@@ -940,6 +941,11 @@ def normalise_offload_transport_user_options(options):
940
941
  "OFFLOAD_TRANSPORT_FETCH_SIZE/--offload-transport-fetch-size",
941
942
  options.offload_transport_fetch_size,
942
943
  )
944
+ if options.offload_transport_snapshot:
945
+ options.offload_transport_snapshot = check_opt_is_posint(
946
+ "--offload-transport-snapshot",
947
+ options.offload_transport_snapshot,
948
+ )
943
949
 
944
950
  verify_json_option(
945
951
  "OFFLOAD_TRANSPORT_SPARK_PROPERTIES/--offload-transport-spark-properties",
@@ -2242,6 +2248,7 @@ class OffloadOperation(BaseOperation):
2242
2248
  offload_transport_queue_name=options.offload_transport_queue_name,
2243
2249
  offload_transport_parallelism=options.offload_transport_parallelism,
2244
2250
  offload_transport_small_table_threshold=options.offload_transport_small_table_threshold,
2251
+ offload_transport_snapshot=options.offload_transport_snapshot,
2245
2252
  offload_transport_spark_properties=options.offload_transport_spark_properties,
2246
2253
  offload_transport_validation_polling_interval=options.offload_transport_validation_polling_interval,
2247
2254
  offload_type=options.offload_type,
@@ -2416,6 +2423,7 @@ class OffloadOperation(BaseOperation):
2416
2423
  "offload_transport_small_table_threshold",
2417
2424
  orchestration_defaults.offload_transport_small_table_threshold_default(),
2418
2425
  ),
2426
+ offload_transport_snapshot=operation_dict.get("offload_transport_snapshot"),
2419
2427
  offload_transport_spark_properties=operation_dict.get(
2420
2428
  "offload_transport_spark_properties",
2421
2429
  orchestration_defaults.offload_transport_spark_properties_default(),
@@ -2841,13 +2849,6 @@ def offload_table(
2841
2849
 
2842
2850
  rows_offloaded = None
2843
2851
 
2844
- pre_offload_snapshot = None
2845
- if offload_options.db_type == offload_constants.DBTYPE_ORACLE:
2846
- # Pre-offload SCN will be stored in metadata.
2847
- pre_offload_snapshot = offload_source_table.get_current_scn(
2848
- return_none_on_failure=True
2849
- )
2850
-
2851
2852
  create_final_backend_table_step(offload_target_table, offload_operation)
2852
2853
 
2853
2854
  data_transport_client = offload_transport_factory(
@@ -2860,6 +2861,11 @@ def offload_table(
2860
2861
  dfs_client,
2861
2862
  )
2862
2863
 
2864
+ pre_offload_snapshot = None
2865
+ if offload_options.db_type == offload_constants.DBTYPE_ORACLE:
2866
+ # Pre-offload SCN will be stored in metadata.
2867
+ pre_offload_snapshot = data_transport_client.get_transport_snapshot()
2868
+
2863
2869
  offload_target_table.set_final_table_casts(
2864
2870
  offload_source_table.columns,
2865
2871
  data_transport_client.get_staging_file().get_staging_columns(),
@@ -64,7 +64,6 @@ from goe.offload.offload_messages import VERBOSE, VVERBOSE
64
64
  from goe.offload.offload_constants import (
65
65
  CAPABILITY_BUCKET_HASH_COLUMN,
66
66
  CAPABILITY_CANONICAL_DATE,
67
- CAPABILITY_CANONICAL_FLOAT,
68
67
  CAPABILITY_CANONICAL_TIME,
69
68
  CAPABILITY_CASE_SENSITIVE,
70
69
  CAPABILITY_COLUMN_STATS_SET,
@@ -78,11 +77,7 @@ from goe.offload.offload_constants import (
78
77
  CAPABILITY_FS_SCHEME_INHERIT,
79
78
  CAPABILITY_FS_SCHEME_WASB,
80
79
  CAPABILITY_GOE_COLUMN_TRANSFORMATIONS,
81
- CAPABILITY_GOE_JOIN_PUSHDOWN,
82
- CAPABILITY_GOE_MATERIALIZED_JOIN,
83
80
  CAPABILITY_GOE_PARTITION_FUNCTIONS,
84
- CAPABILITY_GOE_SEQ_TABLE,
85
- CAPABILITY_GOE_UDFS,
86
81
  CAPABILITY_LOAD_DB_TRANSPORT,
87
82
  CAPABILITY_NAN,
88
83
  CAPABILITY_NANOSECONDS,
@@ -121,10 +116,6 @@ class BackendStatsException(Exception):
121
116
  pass
122
117
 
123
118
 
124
- class MissingSequenceTableException(Exception):
125
- pass
126
-
127
-
128
119
  class BackendApiConnectionException(Exception):
129
120
  pass
130
121
 
@@ -1595,25 +1586,6 @@ FROM %(db)s.%(table)s%(where_clause)s%(group_by)s%(order_by)s""" % {
1595
1586
  def get_user_name(self):
1596
1587
  pass
1597
1588
 
1598
- @abstractmethod
1599
- def insert_literal_values(
1600
- self,
1601
- db_name,
1602
- table_name,
1603
- literal_list,
1604
- column_list=None,
1605
- max_rows_per_insert=250,
1606
- split_by_cr=True,
1607
- ):
1608
- """Used to insert specific data into a table. The table should already exist.
1609
- literal_list: A list of rows to insert (a list of lists).
1610
- The row level lists should contain the exact right number of columns.
1611
- column_list: The column specs for the columns to be inserted, if left blank this will default to all
1612
- columns in the table
1613
- Disclaimer: This code is used in testing and generating the sequence table. It is not robust enough to
1614
- be a part of any Offload Transport
1615
- """
1616
-
1617
1589
  @abstractmethod
1618
1590
  def is_nan_sql_expression(self, column_expr):
1619
1591
  """Return a SQL expression testing if an expression is NaN (not-a-number)."""
@@ -1738,18 +1710,6 @@ FROM %(db)s.%(table)s%(where_clause)s%(group_by)s%(order_by)s""" % {
1738
1710
  """Returns True if the backend column requires a synthetic column if it is used for partitioning."""
1739
1711
  pass
1740
1712
 
1741
- @abstractmethod
1742
- def populate_sequence_table(
1743
- self, db_name, table_name, starting_seq, target_seq, split_by_cr=False
1744
- ):
1745
- """Populate options.sequence_table_name up to target_seq.
1746
- split_by_cr: This option is a bit of a fudge but allows a calling program to parse the output.
1747
- The idea being that, on some backends, this method may produce lengthy output
1748
- which we may not want on screen. With split_by_cr the calling program has the
1749
- opportunity to split the executed text by cr and only log some lines.
1750
- """
1751
- pass
1752
-
1753
1713
  @abstractmethod
1754
1714
  def refresh_table_files(self, db_name, table_name, sync=None):
1755
1715
  pass
@@ -1770,10 +1730,6 @@ FROM %(db)s.%(table)s%(where_clause)s%(group_by)s%(order_by)s""" % {
1770
1730
  """Check the role exists, returns True/False"""
1771
1731
  pass
1772
1732
 
1773
- @abstractmethod
1774
- def sequence_table_max(self, db_name, table_name):
1775
- pass
1776
-
1777
1733
  @abstractmethod
1778
1734
  def set_column_stats(
1779
1735
  self, db_name, table_name, new_column_stats, ndv_cap, num_null_factor
@@ -1886,28 +1842,6 @@ FROM %(db)s.%(table)s%(where_clause)s%(group_by)s%(order_by)s""" % {
1886
1842
  """
1887
1843
  pass
1888
1844
 
1889
- @abstractmethod
1890
- def udf_installation_os(self, user_udf_version):
1891
- """Copies any libraries required to support UDFs from our software package to wherever they should be.
1892
- Returns a list of commands executed.
1893
- """
1894
- pass
1895
-
1896
- @abstractmethod
1897
- def udf_installation_sql(self, create_udf_db, udf_db=None):
1898
- """Executes any SQL commands required for UDF installation.
1899
- Returns a list of commands executed, in dry_run mode that's all it does.
1900
- udf_db can be empty which means we won't specify one and pickup a default.
1901
- """
1902
- pass
1903
-
1904
- @abstractmethod
1905
- def udf_installation_test(self, udf_db=None):
1906
- """Executes any SQL commands to test each UDF.
1907
- udf_db can be empty which means we won't specify one and pickup a default.
1908
- """
1909
- pass
1910
-
1911
1845
  @abstractmethod
1912
1846
  def valid_canonical_override(self, column, canonical_override):
1913
1847
  """Present has a number of options for overriding the default canonical mapping in to_canonical_column().
@@ -1952,10 +1886,6 @@ FROM %(db)s.%(table)s%(where_clause)s%(group_by)s%(order_by)s""" % {
1952
1886
  """
1953
1887
  return self.is_capability_supported(CAPABILITY_CANONICAL_DATE)
1954
1888
 
1955
- def canonical_float_supported(self):
1956
- """Does the backend have a pure 4 byte binary floating point data type"""
1957
- return self.is_capability_supported(CAPABILITY_CANONICAL_FLOAT)
1958
-
1959
1889
  def canonical_time_supported(self):
1960
1890
  """Does the backend have a pure time data type (no date part).
1961
1891
  Note that there is an Impala override for this.
@@ -2008,21 +1938,9 @@ FROM %(db)s.%(table)s%(where_clause)s%(group_by)s%(order_by)s""" % {
2008
1938
  def goe_column_transformations_supported(self):
2009
1939
  return self.is_capability_supported(CAPABILITY_GOE_COLUMN_TRANSFORMATIONS)
2010
1940
 
2011
- def goe_join_pushdown_supported(self):
2012
- return self.is_capability_supported(CAPABILITY_GOE_JOIN_PUSHDOWN)
2013
-
2014
- def goe_materialized_join_supported(self):
2015
- return self.is_capability_supported(CAPABILITY_GOE_MATERIALIZED_JOIN)
2016
-
2017
1941
  def goe_partition_functions_supported(self):
2018
1942
  return self.is_capability_supported(CAPABILITY_GOE_PARTITION_FUNCTIONS)
2019
1943
 
2020
- def goe_sequence_table_supported(self):
2021
- return self.is_capability_supported(CAPABILITY_GOE_SEQ_TABLE)
2022
-
2023
- def goe_udfs_supported(self):
2024
- return self.is_capability_supported(CAPABILITY_GOE_UDFS)
2025
-
2026
1944
  def load_db_transport_supported(self):
2027
1945
  return self.is_capability_supported(CAPABILITY_LOAD_DB_TRANSPORT)
2028
1946
 
@@ -209,7 +209,6 @@ class BackendTableInterface(metaclass=ABCMeta):
209
209
  self._offload_staging_format = getattr(
210
210
  self._orchestration_config, "offload_staging_format", None
211
211
  )
212
- self._udf_db = getattr(self._orchestration_config, "udf_db", None)
213
212
  # If orchestration_operation is not set then we are not doing anything significant by way of offload/present
214
213
  self._ipa_predicate_type = None
215
214
  self._offload_distribute_enabled = None
@@ -1044,12 +1043,12 @@ class BackendTableInterface(metaclass=ABCMeta):
1044
1043
 
1045
1044
  def _partition_function_sql_expression(self, partition_info, sql_input_expression):
1046
1045
  """Return a string containing a call to a partition function UDF.
1047
- e.g. UDF_DB.UDF_NAME(sql_input_expression)
1046
+ e.g. SCHEMA.UDF_NAME(sql_input_expression)
1048
1047
  """
1049
1048
  assert partition_info
1050
- udf_db, udf_name = partition_info.function.split(".")
1049
+ udf_schema, udf_name = partition_info.function.split(".")
1051
1050
  return "{}({})".format(
1052
- self._db_api.enclose_object_reference(udf_db, udf_name),
1051
+ self._db_api.enclose_object_reference(udf_schema, udf_name),
1053
1052
  sql_input_expression,
1054
1053
  )
1055
1054
 
@@ -1807,10 +1806,6 @@ class BackendTableInterface(metaclass=ABCMeta):
1807
1806
  def default_date_based_partition_granularity(self):
1808
1807
  return self._db_api.default_date_based_partition_granularity()
1809
1808
 
1810
- def default_udf_db_name(self):
1811
- """By default we support UDF_DB but individual backends may have their own override"""
1812
- return self._udf_db
1813
-
1814
1809
  def delta_table_exists(self):
1815
1810
  return False
1816
1811
 
@@ -2375,18 +2370,6 @@ class BackendTableInterface(metaclass=ABCMeta):
2375
2370
  def staging_area_exists(self):
2376
2371
  pass
2377
2372
 
2378
- @abstractmethod
2379
- def synthetic_bucket_data_type(self):
2380
- pass
2381
-
2382
- @abstractmethod
2383
- def synthetic_bucket_filter_capable_column(self, backend_column):
2384
- """Returns the metadata method and SQL expression pattern used to generate the bucket id
2385
- Currently only enabling bucket filtering for integral data
2386
- When we consider opening this up to other types we should consider excluding TZ aware data because
2387
- a backend upgrade could change the result of CASTs
2388
- """
2389
-
2390
2373
  ###########################################################################
2391
2374
  # PUBLIC METHODS - HIGH LEVEL STEP METHODS AND SUPPORTING ABSTRACT METHODS
2392
2375
  ###########################################################################
@@ -2530,9 +2513,6 @@ class BackendTableInterface(metaclass=ABCMeta):
2530
2513
  def canonical_date_supported(self):
2531
2514
  return self._db_api.canonical_date_supported()
2532
2515
 
2533
- def canonical_float_supported(self):
2534
- return self._db_api.canonical_float_supported()
2535
-
2536
2516
  def canonical_time_supported(self):
2537
2517
  return self._db_api.canonical_time_supported()
2538
2518
 
@@ -2545,18 +2525,9 @@ class BackendTableInterface(metaclass=ABCMeta):
2545
2525
  def goe_column_transformations_supported(self):
2546
2526
  return self._db_api.goe_column_transformations_supported()
2547
2527
 
2548
- def goe_join_pushdown_supported(self):
2549
- return self._db_api.goe_join_pushdown_supported()
2550
-
2551
- def goe_materialized_join_supported(self):
2552
- return self._db_api.goe_materialized_join_supported()
2553
-
2554
2528
  def goe_partition_functions_supported(self):
2555
2529
  return self._db_api.goe_partition_functions_supported()
2556
2530
 
2557
- def goe_udfs_supported(self):
2558
- return self._db_api.goe_udfs_supported()
2559
-
2560
2531
  def nan_supported(self):
2561
2532
  return self._db_api.nan_supported()
2562
2533
 
@@ -23,7 +23,6 @@
23
23
  from datetime import datetime
24
24
  import logging
25
25
  from math import ceil
26
- import pprint
27
26
  import re
28
27
  from textwrap import dedent
29
28
  import traceback
@@ -255,9 +254,9 @@ class BackendBigQueryApi(BackendApiInterface):
255
254
  def _check_kms_key_name(self, kms_key_name: str, key_type="job"):
256
255
  """Use startswith() to verify custom key for key name.
257
256
  Example of custom key name:
258
- projects/goe-teamcity/locations/us-west3/keyRings/krname/cryptoKeys/etl5
257
+ projects/goe-test/locations/us-west3/keyRings/krname/cryptoKeys/etl5
259
258
  Example of what we get from a query_job object:
260
- projects/goe-teamcity/locations/us-west3/keyRings/krname/cryptoKeys/etl5/cryptoKeyVersions/1
259
+ projects/goe-test/locations/us-west3/keyRings/krname/cryptoKeys/etl5/cryptoKeyVersions/1
261
260
  It's worth noting that this has not always been the case, BigQuery behaviour has changed in the past.
262
261
  """
263
262
  if self._kms_key_name and not (kms_key_name or "").startswith(
@@ -1814,68 +1813,6 @@ FROM %(from_db_table)s%(where)s""" % {
1814
1813
  row = self.execute_query_fetch_one("SELECT SESSION_USER()", log_level=None)
1815
1814
  return row[0] if row else None
1816
1815
 
1817
- def insert_literal_values(
1818
- self,
1819
- db_name,
1820
- table_name,
1821
- literal_list,
1822
- column_list=None,
1823
- max_rows_per_insert=250,
1824
- split_by_cr=True,
1825
- ):
1826
- """Insert an array of literals into a table using INSERT...VALUES(...),(...),(...).
1827
- We've done this for simplicity due to two issues:
1828
- 1) BigQuery issue: https://github.com/googleapis/google-cloud-python/issues/5539
1829
- "The issue is eventual consistency with the backend. Replacing the table, while it has the
1830
- same table_id, represents a new table in terms of it's internal UUID and thus backends may
1831
- deliver to the "old" table for a short period (typically a few minutes)."
1832
- This means we can have problems with this method of inserting rows, it is likely only suitable for testing.
1833
- 2) Python does not support encoding Decimal to JSON until Python 3.10:
1834
- https://bugs.python.org/issue16535
1835
- Which gives us issue with this API:
1836
- site-packages/google/cloud/bigquery/client.py", line 3421, in insert_rows
1837
- return self.insert_rows_json(table, json_rows, **kwargs)
1838
- ...
1839
- json/encoder.py", line 179, in default
1840
- raise TypeError(f'Object of type {o.__class__.__name__} '
1841
- TypeError: Object of type Decimal is not JSON serializable
1842
- """
1843
-
1844
- def gen_literal(py_val, data_type):
1845
- return str(self.to_backend_literal(py_val, data_type))
1846
-
1847
- assert db_name
1848
- assert table_name
1849
- assert literal_list and isinstance(literal_list, list)
1850
- assert isinstance(literal_list[0], list)
1851
-
1852
- column_list = column_list or self.get_columns(db_name, table_name)
1853
- column_names = [_.name for _ in column_list]
1854
- data_type_strs = [_.format_data_type() for _ in column_list]
1855
-
1856
- cmds = []
1857
- remaining_rows = literal_list[:]
1858
- while remaining_rows:
1859
- this_chunk = remaining_rows[:max_rows_per_insert]
1860
- remaining_rows = remaining_rows[max_rows_per_insert:]
1861
- formatted_rows = []
1862
- for row in this_chunk:
1863
- formatted_rows.append(
1864
- ",".join(
1865
- gen_literal(py_val, data_type)
1866
- for py_val, data_type in zip(row, data_type_strs)
1867
- )
1868
- )
1869
- sql = self._insert_literals_using_insert_values_sql_text(
1870
- db_name,
1871
- table_name,
1872
- column_names,
1873
- formatted_rows,
1874
- split_by_cr=split_by_cr,
1875
- )
1876
- cmds.extend(self.execute_dml(sql, log_level=VVERBOSE))
1877
- return cmds
1878
-
1879
1816
  def is_nan_sql_expression(self, column_expr):
1880
1817
  """is_nan for BigQuery"""
1881
1818
  return "is_nan(%s)" % column_expr
@@ -2086,11 +2023,6 @@ FROM %(from_db_table)s%(where)s""" % {
2086
2023
  """
2087
2024
  return -(2**63)
2088
2025
 
2089
- def populate_sequence_table(
2090
- self, db_name, table_name, starting_seq, target_seq, split_by_cr=False
2091
- ):
2092
- raise NotImplementedError("Sequence table does not apply for BigQuery")
2093
-
2094
2026
  def refresh_table_files(self, db_name, table_name, sync=None):
2095
2027
  """No requirement to re-scan files for a table on BigQuery but drop from cache because that will be stale"""
2096
2028
  self.drop_state()
@@ -2128,9 +2060,6 @@ FROM %(from_db_table)s%(where)s""" % {
2128
2060
  """No roles in BigQuery"""
2129
2061
  pass
2130
2062
 
2131
- def sequence_table_max(self, db_name, table_name):
2132
- raise NotImplementedError("Sequence table does not apply for BigQuery")
2133
-
2134
2063
  def set_column_stats(
2135
2064
  self, db_name, table_name, new_column_stats, ndv_cap, num_null_factor
2136
2065
  ):
@@ -2287,15 +2216,6 @@ FROM %(from_db_table)s%(where)s""" % {
2287
2216
  except NotFound:
2288
2217
  return False
2289
2218
 
2290
- def udf_installation_os(self, user_udf_version):
2291
- raise NotImplementedError("GOE UDFs are not supported on BigQuery")
2292
-
2293
- def udf_installation_sql(self, create_udf_db, udf_db=None):
2294
- raise NotImplementedError("GOE UDFs are not supported on BigQuery")
2295
-
2296
- def udf_installation_test(self, udf_db=None):
2297
- raise NotImplementedError("GOE UDFs are not supported on BigQuery")
2298
-
2299
2219
  def valid_canonical_override(self, column, canonical_override):
2300
2220
  assert isinstance(column, BigQueryColumn)
2301
2221
  if isinstance(canonical_override, CanonicalColumn):
@@ -499,10 +499,6 @@ class BackendBigQueryTable(BackendTableInterface):
499
499
  else:
500
500
  return []
501
501
 
502
- def default_udf_db_name(self):
503
- """By default we support UDF_DB but on BigQuery we use the data db as a fall back"""
504
- return self._udf_db or self.db_name
505
-
506
502
  def empty_staging_area(self, staging_file):
507
503
  self._rm_load_table_location()
508
504
 
@@ -623,12 +619,6 @@ class BackendBigQueryTable(BackendTableInterface):
623
619
  self._warning("Staging database %s does not exist" % self._load_db_name)
624
620
  return self._load_db_exists()
625
621
 
626
- def synthetic_bucket_data_type(self):
627
- raise NotImplementedError("Synthetic bucketing is not supported on BigQuery")
628
-
629
- def synthetic_bucket_filter_capable_column(self, backend_column):
630
- raise NotImplementedError("Synthetic bucketing is not supported on BigQuery")
631
-
632
622
  def validate_type_conversions(self, staging_columns: list):
633
623
  """Validate the staged data before we insert it into the final backend table.
634
624
  BigQuery catches overflowing casts but this way we can spot them beforehand and
@@ -35,7 +35,6 @@ def offload_transport_factory(
35
35
  offload_options,
36
36
  messages,
37
37
  dfs_client,
38
- rdbms_columns_override=None,
39
38
  ):
40
39
  """Constructs and returns an appropriate data transport object based on user inputs and RDBMS table"""
41
40
  if offload_transport_method == OFFLOAD_TRANSPORT_METHOD_QUERY_IMPORT:
@@ -51,7 +50,6 @@ def offload_transport_factory(
51
50
  offload_options,
52
51
  messages,
53
52
  dfs_client,
54
- rdbms_columns_override=rdbms_columns_override,
55
53
  )
56
54
  elif offload_transport_method == OFFLOAD_TRANSPORT_METHOD_SQOOP:
57
55
  from goe.offload.hadoop.sqoop_offload_transport import (
@@ -68,7 +66,6 @@ def offload_transport_factory(
68
66
  offload_options,
69
67
  messages,
70
68
  dfs_client,
71
- rdbms_columns_override=rdbms_columns_override,
72
69
  )
73
70
  elif offload_transport_method == OFFLOAD_TRANSPORT_METHOD_SQOOP_BY_QUERY:
74
71
  from goe.offload.hadoop.sqoop_offload_transport import (
@@ -85,7 +82,6 @@ def offload_transport_factory(
85
82
  offload_options,
86
83
  messages,
87
84
  dfs_client,
88
- rdbms_columns_override=rdbms_columns_override,
89
85
  )
90
86
  elif offload_transport_method == OFFLOAD_TRANSPORT_METHOD_SPARK_THRIFT:
91
87
  from goe.offload.offload_transport import OffloadTransportSparkThrift
@@ -100,7 +96,6 @@ def offload_transport_factory(
100
96
  offload_options,
101
97
  messages,
102
98
  dfs_client,
103
- rdbms_columns_override=rdbms_columns_override,
104
99
  )
105
100
  elif offload_transport_method == OFFLOAD_TRANSPORT_METHOD_SPARK_SUBMIT:
106
101
  from goe.offload.offload_transport import OffloadTransportSparkSubmit
@@ -115,7 +110,6 @@ def offload_transport_factory(
115
110
  offload_options,
116
111
  messages,
117
112
  dfs_client,
118
- rdbms_columns_override=rdbms_columns_override,
119
113
  )
120
114
  elif offload_transport_method == OFFLOAD_TRANSPORT_METHOD_SPARK_DATAPROC_GCLOUD:
121
115
  from goe.offload.spark.dataproc_offload_transport import (
@@ -133,7 +127,6 @@ def offload_transport_factory(
133
127
  offload_options,
134
128
  messages,
135
129
  dfs_client,
136
- rdbms_columns_override=rdbms_columns_override,
137
130
  )
138
131
  elif offload_transport_method == OFFLOAD_TRANSPORT_METHOD_SPARK_BATCHES_GCLOUD:
139
132
  from goe.offload.spark.dataproc_offload_transport import (
@@ -150,7 +143,6 @@ def offload_transport_factory(
150
143
  offload_options,
151
144
  messages,
152
145
  dfs_client,
153
- rdbms_columns_override=rdbms_columns_override,
154
146
  )
155
147
  elif offload_transport_method == OFFLOAD_TRANSPORT_METHOD_SPARK_LIVY:
156
148
  from goe.offload.spark.livy_offload_transport import OffloadTransportSparkLivy
@@ -165,7 +157,6 @@ def offload_transport_factory(
165
157
  offload_options,
166
158
  messages,
167
159
  dfs_client,
168
- rdbms_columns_override=rdbms_columns_override,
169
160
  )
170
161
  else:
171
162
  raise NotImplementedError(
@@ -14,9 +14,9 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- """ FrontendApiInterface: Library for logic/interaction with an RDBMS frontend.
18
- This module enforces an interface with common, high level, methods and an implementation
19
- for each supported RDBMS, e.g. Oracle, MSSQL
17
+ """FrontendApiInterface: Library for logic/interaction with an RDBMS frontend.
18
+ This module enforces an interface with common, high level, methods and an implementation
19
+ for each supported RDBMS, e.g. Oracle, MSSQL
20
20
  """
21
21
 
22
22
  import logging
@@ -29,16 +29,13 @@ from goe.offload.column_metadata import (
29
29
  )
30
30
  from goe.offload.offload_constants import (
31
31
  CAPABILITY_CANONICAL_DATE,
32
- CAPABILITY_CANONICAL_FLOAT,
33
32
  CAPABILITY_CANONICAL_TIME,
34
33
  CAPABILITY_CASE_SENSITIVE,
35
34
  CAPABILITY_GOE_HAS_DB_CODE_COMPONENT,
36
- CAPABILITY_GOE_JOIN_PUSHDOWN,
37
35
  CAPABILITY_GOE_LIST_PARTITION_APPEND,
38
36
  CAPABILITY_GOE_MULTI_COLUMN_INCREMENTAL_KEY,
39
37
  CAPABILITY_GOE_OFFLOAD_STATUS_REPORT,
40
38
  CAPABILITY_GOE_SCHEMA_SYNC,
41
- CAPABILITY_HYBRID_SCHEMA,
42
39
  CAPABILITY_LOW_HIGH_VALUE_FROM_STATS,
43
40
  CAPABILITY_NAN,
44
41
  CAPABILITY_PARAMETERIZED_QUERIES,
@@ -406,6 +403,10 @@ class FrontendApiInterface(metaclass=ABCMeta):
406
403
  [OracleColumn(...), OracleColumn(...)]
407
404
  """
408
405
 
406
+ @abstractmethod
407
+ def get_current_scn(self):
408
+ """Return the current system change number for the frontend."""
409
+
409
410
  @abstractmethod
410
411
  def get_db_unique_name(self) -> str:
411
412
  """Return the unique name for the frontend database"""
@@ -833,10 +834,6 @@ class FrontendApiInterface(metaclass=ABCMeta):
833
834
  """
834
835
  return self.is_capability_supported(CAPABILITY_CANONICAL_DATE)
835
836
 
836
- def canonical_float_supported(self) -> bool:
837
- """Does the frontend have a pure 4 byte binary floating point data type"""
838
- return self.is_capability_supported(CAPABILITY_CANONICAL_FLOAT)
839
-
840
837
  def canonical_time_supported(self) -> bool:
841
838
  """Does the frontend have a pure time data type (no date part).
842
839
  Note that there is an Impala override for this.
@@ -851,9 +848,6 @@ class FrontendApiInterface(metaclass=ABCMeta):
851
848
  """Does the frontend have any in-database GOE code"""
852
849
  return self.is_capability_supported(CAPABILITY_GOE_HAS_DB_CODE_COMPONENT)
853
850
 
854
- def goe_join_pushdown_supported(self) -> bool:
855
- return self.is_capability_supported(CAPABILITY_GOE_JOIN_PUSHDOWN)
856
-
857
851
  def goe_lpa_supported(self) -> bool:
858
852
  return self.is_capability_supported(CAPABILITY_GOE_LIST_PARTITION_APPEND)
859
853