Releases: dagster-io/dagster
Release list
0.7.7
Breaking Changes
-
The default sqlite and
dagster-postgresimplementations have been altered to extract the
eventstep_keyfield as a column, to enable faster per-step queries. You will need to run
dagster instance migrateto update the schema. You may optionally migrate your historical event
log data to extract thestep_keyusing themigrate_event_log_datafunction. This will ensure
that your historical event log data will be captured in future step-key based views. This
event_logdata migration can be invoked as follows:from dagster.core.storage.event_log.migration import migrate_event_log_data from dagster import DagsterInstance migrate_event_log_data(instance=DagsterInstance.get())
-
We have made pipeline metadata serializable and persist that along with run information.
While there are no user-facing features to leverage this yet, it does require an instance migration.
dagster instance migrate. If you have already run the migration for theevent_logchanges
above, you do not need to run it again. Any unforeseen errors related the the newsnapshot_id
in therunstable or the newsnapshotstable are related to this migration. -
dagster-pandas
ColumnTypeConstrainthas been removed in favor ofColumnDTypeFnConstraintand
ColumnDTypeInSetConstraint.
New
- You can now specify that dagstermill output notebooks be yielded as an output from dagstermill
solids, in addition to being materialized. - You may now set the extension on files created using the
FileManagermachinery. - dagster-pandas typed
PandasColumnconstructors now support pandas 1.0 dtypes. - The Dagit Playground has been restructured to make the relationship between Preset, Partition
Sets, Modes, and subsets more clear. All of these buttons have be reconciled and moved to the
left side of the Playground. - Config sections that are required but not filled out in the Dagit playground are now detected
and labeled in orange. - dagster-celery config now support using
env:to load from environment variables.
Bugfix
- Fixed a bug where selecting a preset in
dagitwould not populate tags specified on the pipeline
definition. - Fixed a bug where metadata attached to a raised
Failurewas not displayed in the error modal in
dagit. - Fixed an issue where reimporting dagstermill and calling
dagstermill.get_context()outside of
the parameters cell of a dagstermill notebook could lead to unexpected behavior. - Fixed an issue with connection pooling in dagster-postgres, improving responsiveness when using
the Postgres-backed storages.
Experimental
- Added a longitudinal view of runs for on the
Scheduletab for scheduled, partitioned pipelines.
Includes views of run status, execution time, and materializations across partitions. The UI is
in flux and is currently optimized for daily schedules, but feedback is welcome.
0.7.6
Breaking Changes
default_valueinFieldno longer accepts native instances of python enums. Instead
the underlying string representation in the config system must be used.default_valueinFieldno longer accepts callables.- The
dagster_awsimports have been reorganized; you should now import resources from
dagster_aws.<AWS service name>.dagster_awsprovidess3,emr,redshift, andcloudwatch
modules. - The
dagster_awsS3 resource no longer attempts to model the underlying boto3 API, and you can
now just use any boto3 S3 API directly on a S3 resource, e.g.
context.resources.s3.list_objects_v2. (#2292)
New
- New
Playgroundview indagitshowing an interactive config map - Improved storage and UI for showing schedule attempts
- Added the ability to set default values in
InputDefinition - Added CLI command
dagster pipeline launchto launch runs using a configuredRunLauncher - Added ability to specify pipeline run tags using the CLI
- Added a
pdbutility toSolidExecutionContextto help with debugging, available within a solid ascontext.pdb - Added
PresetDefinition.with_additional_configto allow for config overrides - Added resource name to log messages generated during resource initialization
- Added grouping tags for runs that have been retried / reexecuted.
Bugfix
- Fixed a bug where date range partitions with a specified end date was clipping the last day
- Fixed an issue where some schedule attempts that failed to start would be marked running forever.
- Fixed the
@weeklypartitioned schedule decorator - Fixed timezone inconsistencies between the runs view and the schedules view
- Integers are now accepted as valid values for Float config fields
- Fixed an issue when executing dagstermill solids with config that contained quote characters.
dagstermill
- The Jupyter kernel to use may now be specified when creating dagster notebooks with the --kernel flag.
dagster-dbt
dbt_solidnow has aNothinginput to allow for sequencing
dagster-k8s
- Added
get_celery_engine_configto select celery engine, leveraging Celery infrastructure
Documentation
- Improvements to the airline and bay bikes demos
- Improvements to our dask deployment docs (Thanks jswaney!!)
0.7.5
New
-
Added the
IntSourcetype, which lets integers be set from environment variables in config. -
You may now set tags on pipeline definitions. These will resolve in the following cases:
- Loading in the playground view in Dagit will pre-populate the tag container.
- Loading partition sets from the preset/config picker will pre-populate the tag container with
the union of pipeline tags and partition tags, with partition tags taking precedence. - Executing from the CLI will generate runs with the pipeline tags.
- Executing programmatically using the
execute_pipelineapi will create a run with the union
of pipeline tags andRunConfigtags, withRunConfigtags taking precedence. - Scheduled runs (both launched and executed) will have the union of pipeline tags and the
schedule tags function, with the schedule tags taking precedence.
-
Output materialization configs may now yield multiple Materializations, and the tutorial has
been updated to reflect this. -
We now export the
SolidExecutionContextin the public API so that users can correctly type hint
solid compute functions.
Dagit
- Pipeline run tags are now preserved when resuming/retrying from Dagit.
- Scheduled run stats are now grouped by partition.
- A "preparing" section has been added to the execution viewer. This shows steps that are in
progress of starting execution. - Markers emitted by the underlying execution engines are now visualized in the Dagit execution
timeline.
Bugfix
- Resume/retry now works as expected in the presence of solids that yield optional outputs.
- Fixed an issue where dagster-celery workers were failing to start in the presence of config
values that wereNone. - Fixed an issue with attempting to set
threads_per_workeron Dask distributed clusters.
dagster-postgres
- All postgres config may now be set using environment variables in config.
dagster-aws
- The
s3_resourcenow exposes alist_objects_v2method corresponding to the underlying boto3
API. (Thanks, @basilvetas!) - Added the
redshift_resourceto access Redshift databases.
dagster-k8s
- The
K8sRunLauncherconfig now includes theload_kubeconfigandkubeconfig_fileoptions.
Documentation
- Fixes and improvements.
Dependencies
- dagster-airflow no longer pins its werkzeug dependency.
Community
-
We've added opt-in telemetry to Dagster so we can collect usage statistics in order to inform
development priorities. Telemetry data will motivate projects such as adding features in
frequently-used parts of the CLI and adding more examples in the docs in areas where users
encounter more errors.We will not see or store solid definitions (including generated context) or pipeline definitions
(including modes and resources). We will not see or store any data that is processed within solids
and pipelines.If you'd like to opt in to telemetry, please add the following to
$DAGSTER_HOME/dagster.yaml:telemetry: enabled: true -
Thanks to @basilvetas and @hspak for their contributions!
0.7.4
New
- It is now possible to use Postgres to back schedule storage by configuring
dagster_postgres.PostgresScheduleStorageon the instance. - Added the
execute_pipeline_with_modeAPI to allow executing a pipeline in test with a specific
mode without having to specifyRunConfig. - Experimental support for retries in the Celery executor.
- It is now possible to set run-level priorities for backfills run using the Celery executor by
passing--celery-base-prioritytodagster pipeline backfill. - Added the
@weeklyschedule decorator.
Deprecations
- The
dagster-gelibrary has been removed from this release due to drift from the underlying
Great Expectations implementation.
dagster-pandas
PandasColumnnow includes anis_optionalflag, replacing the previous
ColumnExistsConstraint.- You can now pass the
ignore_missing_values flagtoPandasColumnin order to apply column
constraints only to the non-missing rows in a column.
dagster-k8s
- The Helm chart now includes provision for an Ingress and for multiple Celery queues.
Documentation
- Improvements and fixes.
0.7.3
New
- It is now possible to configure a dagit instance to disable executing pipeline runs in a local
subprocess. - Resource initialization, teardown, and associated failure states now emit structured events
visible in Dagit. Structured events for pipeline errors and multiprocess execution have been
consolidated and rationalized. - Support Redis queue provider in
dagster-k8sHelm chart. - Support external postgresql in
dagster-k8sHelm chart.
Bugfix
- Fixed an issue with inaccurate timings on some resource initializations.
- Fixed an issue that could cause the multiprocess engine to spin forever.
- Fixed an issue with default value resolution when a config value was set using
SourceString. - Fixed an issue when loading logs from a pipeline belonging to a different repository in Dagit.
- Fixed an issue with where the CLI command
dagster schedule upwould fail in certain scenarios
with theSystemCronScheduler.
Pandas
- Column constraints can now be configured to permit NaN values.
Dagstermill
- Removed a spurious dependency on sklearn.
Docs
- Improvements and fixes to docs.
- Restored dagster.readthedocs.io.
Experimental
- An initial implementation of solid retries, throwing a
RetryRequestedexception, was added.
This API is experimental and likely to change.
Other
- Renamed property
runtime_typetodagster_typein definitions. The following are deprecated
and will be removed in a future version.InputDefinition.runtime_typeis deprecated. UseInputDefinition.dagster_typeinstead.OutputDefinition.runtime_typeis deprecated. UseOutputDefinition.dagster_typeinstead.CompositeSolidDefinition.all_runtime_typesis deprecated. UseCompositeSolidDefinition.all_dagster_typesinstead.SolidDefinition.all_runtime_typesis deprecated. UseSolidDefinition.all_dagster_typesinstead.PipelineDefinition.has_runtime_typeis deprecated. UsePipelineDefinition.has_dagster_typeinstead.PipelineDefinition.runtime_type_namedis deprecated. UsePipelineDefinition.dagster_type_namedinstead.PipelineDefinition.all_runtime_typesis deprecated. UsePipelineDefinition.all_dagster_typesinstead.
0.7.2
Docs
- New docs site at docs.dagster.io.
- dagster.readthedocs.io is currently stale due to availability issues.
New
- Improvements to S3 Resource. (Thanks @dwallace0723!)
- Better error messages in Dagit.
- Better font/styling support in Dagit.
- Changed
OutputDefinitionto takeis_requiredrather thanis_optionalargument. This is to
remain consistent with changes toFieldin 0.7.1 and to avoid confusion
with python's typing and dagster's definition ofOptional, which indicates None-ability,
rather than existence.is_optionalis deprecated and will be removed in a future version. - Added support for Flower in dagster-k8s.
- Added support for environment variable config in dagster-snowflake.
Bugfixes
- Improved performance in Dagit waterfall view.
- Fixed bug when executing solids downstream of a skipped solid.
- Improved navigation experience for pipelines in Dagit.
- Fixed for the dagster-aws CLI tool.
- Fixed issue starting Dagit without DAGSTER_HOME set on windows.
- Fixed pipeline subset execution in partition-based schedules.
0.7.1
Dagit
- Dagit now looks up an available port on which to run when the default port is
not available. (Thanks @rparrapy!)
dagster_pandas
- Hydration and materialization are now configurable on
dagster_pandasdataframes.
dagster_aws
- The
s3_resourceno longer uses an unsigned session by default.
Bugfixes
- Type check messages are now displayed in Dagit.
- Failure metadata is now surfaced in Dagit.
- Dagit now correctly displays the execution time of steps that error.
- Error messages now appear correctly in console logging.
- GCS storage is now more robust to transient failures.
- Fixed an issue where some event logs could be duplicated in Dagit.
- Fixed an issue when reading config from an environment variable that wasn't set.
- Fixed an issue when loading a repository or pipeline from a file target on Windows.
- Fixed an issue where deleted runs could cause the scheduler page to crash in Dagit.
Documentation
- Expanded and improved docs and error messages.
Waiting To Exhale
🎆 🚢 🎆 Dagster 0.7.0: Waiting To Exhale 😤 😌 🍵
We are pleased to announce version 0.7.0 of Dagster, codenamed “Waiting To Exhale”. We set out to make Dagster a solution for production-grade pipelines on modern cloud infrastructure. In service of that goal, we needed to fill missing gaps and incorporate feedback from the community at large.
Our last release, 0.6.0, expanded Dagster from local developer experience to a hostable product, allowing for scheduling, execution, and monitoring of pipelines in the cloud.
This release goes further, supporting pipelines with 100s and 1000s of nodes, deployable to modern, scalable cloud infrastructure, with dramatically improved monitoring tools, as well as other features.
Given this, 0.7.0 introduces the following:
- Revamped, Scalable Dagit A completely redesigned Dagit with a more intuitive navigation structure, beautiful look-and-feel, and massive performance improvements to handle pipelines with hundreds or even thousands of nodes.
- Execution Viewer Executing and historical runs within Dagit uses a new live-updating, queryable waterfall viewer. See below for a preview of the new UI:
https://media.giphy.com/media/Rhx6ujovXlvuKaLCGY/giphy.gif
- A Dagster-K8s library which provides the ability to launch runs in ephemeral Kubernetes Pods, as well as an early helm chart for executing pipelines.
- A Dagster-Celery library designed to work with K8s that provides global resource management using dedicated queues, and distributed execution of dagster pipelines across a cluster.
- Streamlined scheduler configuration and new backfill APIs and tools to help manage your scheduled workflows in production.
- A Dagster-Pandas integration that provides useful APIs for dataframe validation, summary statistics emission, and auto-documentation in dagit so that you can better understand and control how data flows through your pipelines.
- Redesigned documentation, examples, and guides to help flesh out the core ideas behind the system.
Warning
There are a substantial number of breaking changes in the 0.7.0 release. These changes effect the scheduler system, config system, required resources, and the type system. We apologize for the thrash, and thank you for bearing with us!
For more info on changes check out the following resources:
Changelog: https://github.com/dagster-io/dagster/blob/master/CHANGES.md
0.7.0 migration guide: https://github.com/dagster-io/dagster/blob/master/070_MIGRATION.md
0.4.0
API Changes
- There is now a new top-level configuration section
storagewhich controls whether or not
execution should store intermediate values and the history of pipeline runs on the filesystem,
on S3, or in memory. ThedagsterCLI now includes options to list and wipe pipeline run
history. Facilities are provided for user-defined types to override the default serialization
used for storage. - Similarily, there is a new configuration for
RunConfigwhere the user can specify
intermediate value storage via an API. OutputDefinitionnow contains an explicitis_optionalparameter and defaults to being
not optional.- New functionality in
dagster.check:is_list - New functionality in
dagster.seven: py23-compatibleFileNotFoundError,json.dump,
json.dumps. - Dagster default logging is now multiline for readability.
- The
Nothingtype now allows dependencies to be constructed between solids that do not have
data dependencies. - Many error messages have been improved.
throw_on_user_errorhas been renamed toraise_on_errorin all APIs, public and private
GraphQL
- The GraphQL layer has been extracted out of Dagit into a separate dagster-graphql package.
startSubplanExecutionhas been replaced byexecutePlan.startPipelineExecutionnow supports reexecution of pipeline subsets.
Dagit
- It is now possible to reexecute subsets of a pipeline run from Dagit.
- Dagit's
Executetab now opens runs in separate browser tabs and a newRunstab allows you to
browse and view historical runs. - Dagit no longer scaffolds configuration when creating new
Executetabs. This functionality will
be refined and revisited in the future. - Dagit's
Exploretab is more performant on large DAGs. - The
dagit -qcommand line flag has been deprecated in favor of a separate command-line
dagster-graphqlutility. - The execute button is now greyed out when Dagit is offline.
- The Dagit UI now includes more contextual cues to make the solid in focus and its connections
more salient. - Dagit no longer offers to open materializations on your machine. Clicking an on-disk
materialization now copies the path to your clipboard. - Pressing Ctrl-Enter now starts execution in Dagit's Execute tab.
- Dagit properly shows List and Nullable types in the DAG view.
Dagster-Airflow
- Dagster-Airflow includes functions to dynamically generate containerized (
DockerOperator-based)
and uncontainerized (PythonOperator-based) Airflow DAGs from Dagster pipelines and config.
Libraries
- Dagster integration code with AWS, Great Expectations, Pandas, Pyspark, Snowflake, and Spark
has been reorganized into a new top-level libraries directory. These modules are now
importable asdagster_aws,dagster_ge,dagster_pandas,dagster_pyspark,
dagster_snowflake, anddagster_spark. - Removed dagster-sqlalchemy and dagma
Examples
- Added the event-pipeline-demo, a realistic web event data pipeline using Spark and Scala.
- Added the Pyspark pagerank example, which demonstrates how to incrementally introduce dagster
into existing data processing workflows.
Documentation
- Docs have been expanded, reorganized, and reformatted.
0.2.8.post3
Hotfix to not put config values in error messages. Had to re-release because of packaging errors uploaded pypi (.pyc files or similar were included)