Releases: meltano/sdk
Releases · meltano/sdk
v0.35.2
v0.35.1
v0.35.1 (2024-02-15)
🐛 Fixes
- #2243 Flattening level of record is now forced to match the provided flattened schema -- Thanks @joaopamaral!
- #2245 Instances of
oneOf
are now handled by null-appending logic - #2242 Hard and soft deletes for handling
ACTIVATE_VERSION
messages now use the sameWHERE
clause -- Thanks @vitoravancini! - #2232 Test workflow job now fails for unsupported Python versions in cookiecutter templates -- Thanks @ReubenFrankel!
- #2225 SQL columns that are non-nullable but not required (i.e. not part of a primary key) are now not included in the
"required": [...]
array of the discovered JSON schema
📚 Documentation Improvements
v0.35.0
v0.35.0 (2024-02-02)
Highlights
- The package now acts a proper pytest plugin, so you may need to remove
pytest_plugins = ("singer_sdk.testing.pytest_plugin",)
from yourtests/conftest.py
file for test fixtures to be loaded correctly. - Dropped support for Python 3.7 (EOL 2023-06-27).
- Dropped direct dependency on
pytz
. If your package usespytz
in any capacity, you may need to add it as an explicit dependency to your project. - Stream maps can now generate fake data! See the docs for more details.
✨ New
- #2208 Allow users to disable schema validation in targets
- #2170 Generate fake data with stream maps -- Thanks @ReubenFrankel!
- #937 Support validating configuration for any tap with a dynamic catalog
- #2144 Support fanning out parent record into multiple child contexts/syncs
- #1918 End RESTStream pagination if an empty page is received
🐛 Fixes
- #2203 Fix serialization of arbitrary objects (e.g.
ObjectId
from mongoDB) during flattening -- Thanks @dgawlowsky! - #2200 Quote column names in INSERT statement
- #2195 Include empty
schemas
directory in REST tap cookiecutter - #2187 Replace use of deprecated
jsonschema._RefResolver
with recommendedreferencing
library - #2184 Reduce amount of unnecessary whitespace in Singer output
- #2183 Ensure
.vscode
directory is included when requested in cookiecutters and avoid failing if it does not exist - #2180 Limit supported Python versions in
--about
output to existing ones - #2108 Log sink name when an unhandled error occurs during setup
- #2158 Fix pytest plugin declaration so it can be used without requiring defining
pytest_plugins
inconftest.py
- #2105 Default handling of
ACTIVATE_VERSION
messages to soft deletes and add newSQLConnector.delete_old_versions
method
⚙️ Under the Hood
- #2189 Use
functools.lru_cache
instead of the stalememoization
library (#1981) - #2188 Remove unused
logger
parameter from private catalog helper functions - #2143 Drop support for Python 3.7
- #2157 Remove
pytz
dependency and usedatetime.timezone.utc
instead ofpytz.UTC
where possible - #2136 Create interface for schema validation in sinks, and implement it for
python-jsonschema
-- Thanks @BuzzCutNorman! - #2130 Allow loading stream schemas from
importlib.resources.abc.Traversable
types
📚 Documentation Improvements
v0.34.1
v0.34.1 (2023-12-19)
🐛 Fixes
- #2118 Output JSONPath expression with match count message -- Thanks @mjsqu!
- #2107 Respect forced replication method when retrieving state
- #2094 Use
nulls_first
when available to orderNULL
results in incremental SQL streams
⚙️ Under the Hood
- #1733 Test with Python 3.12 🐍
- #2095 Use
CursorResult.mappings()
in SQL streams - #2092 Use
datetime.fromisoformat
in other places - #2090 Explicitly use
T
iso date separator
📚 Documentation Improvements
v0.34.0
v0.34.0 (2023-12-05)
Hightlights
- Date-time parsing in target sinks is now significantly faster, thanks to @BuzzCutNorman!
- Experimental support for Parquet encoding in BATCH messages, thanks to @jamielxcarter!
✨ New
- #2044 Add Parquet as a batch encoding option -- Thanks @jamielxcarter!
- #768 Better error messages when config validation fails
- #1854 Make stream logger a child of the tap logger
🐛 Fixes
- #2076 Make a explicit dependency on
python-dateutil
⚙️ Under the Hood
- #2070 Parse dates with
datetime.fromisoformat
/backports.datetime_fromisoformat
-- Thanks @BuzzCutNorman! - #2056 Break up
TapTestClassFactory._annotate_test_class
into simpler methods - #2058 Implement a
SingerWriter
class insinger_sdk.io_base
and use it to emit Singer messages -- Thanks @BuzzCutNorman! - #2061 Simplify target template file names with
post_gen_project.py
hook -- Thanks @vicmattos! - #2060 Simplify tap template file names with
post_gen_project.py
hook -- Thanks @vicmattos!
📚 Documentation Improvements
Full Changelog: v0.33.1...v0.34.0
v0.33.1
v0.33.0
v0.33.0 (2023-10-12)
Hightlights
- Support for simple comprehension expression in stream maps: https://sdk.meltano.com/en/v0.33.0/stream_maps.html#compound-expressions
- Performance improvements for stream maps: expressions are now parsed once and evaluated multiple times.
✨ New
- #1999 Log JSONPath match count at the INFO level
- #1779 Cache SQL columns and schemas
- #2003 Add ability to do list comprehensions in stream map expressions -- Thanks @haleemur!
- #2018 Drop Python 3.7 support in cookiecutter templates -- Thanks @visch!
🐛 Fixes
- #2006 Parse record
time_extracted
intodatetime.datetime
instance - #1996 Respect nullability of leaf properties when flattening schema
- #1844 Safely skip parsing record field as date-time if it is missing in schema
- #1885 Map
record
field to a JSONobject
type - #2015 Ensure
default
property is passed to SCHEMA messages -- Thanks @prakharcode!
📚 Documentation Improvements
- #2017 Document support for comprehensions in stream maps
v0.32.0
v0.32.0 (2023-09-22)
Highlights
- Initial experimental support for different loading methods in targets. Currently, the
overwrite
method works by dropping and recreating tables in SQL targets. Methodsupsert
andappend
are still expected to be implemented by the target.
✨ New
- #1893 Standard configurable load methods
- #1861 SQLTap connector instance shared with streams -- Thanks @BuzzCutNorman!
🐛 Fixes
- #1954 Missing begin()s related to SQLAlchemy 2.0 -- Thanks @andyoneal!
- #1951 Ensure SQL streams are sorted when a replication key is set
- #1949 Retry SQLAlchemy engine creation for adapters without JSON SerDe support
- #1939 Handle
decimal.Decimal
instances in flattening - #1927 Handle replication key not found in stream schema -- Thanks @mjsqu!
- #1977 Fix hanging downstream tests in tap-postgres
- #1970 Warn instead of crashing when schema helpers cannot append
null
to types
⚡ Performance Improvements
- #1962 Ensure
raw_schema
in stream mapper is immutable
📚 Documentation Improvements
v0.31.1
v0.31.0
v0.31.0 (2023-08-07)
Highlights
- Improved connection handling in SQL targets by sharing a connector instance among stream sinks
- Expose builtin
add_record_metadata
andbatch_config
target settings
✨ New
- #1892 Add a mapper cookiecutter template
- #1864 SQLTarget connector instance shared with sinks -- Thanks @BuzzCutNorman!
- #1878 Add
_sdc_sync_started_at
metadata column to indicate the start of the target process - #1484 Bump latest supported sqlalchemy from
1.*
to2.*
🐛 Fixes
- #1898 Correctly serialize
decimal.Decimal
in JSON fields of SQL targets - #1881 Expose
add_record_metadata
as a builtin target setting - #1880 Append batch config if target supports the batch capability
- #1865 Handle missing record properties in SQL sinks
- #1838 Add deprecation warning when importing legacy testing helpers
- #1842 Ensure all expected tap parameters are passed to
SQLTap
initializer - #1853 Check against the unconformed key properties when validating record keys
- #1843 Target template should not reference
tap_id
- #1708 Finalize and write last state message with dedupe
- #1835 Avoid setting up mapper in discovery mode
⚙️ Under the Hood
- #1877 Use
importlib.resources
instead of__file__
to retrieve sample Singer output files
📚 Documentation Improvements
- #1852 Fix stale
pip_url
example that uses shell script workaround for editable installation