-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
🎉 Source Shopify: migrate products
, product images
and product variants
to GraphQL BULK
#37767
🎉 Source Shopify: migrate products
, product images
and product variants
to GraphQL BULK
#37767
Conversation
…migrate-product-images-variants-to-bulk
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
…migrate-product-images-variants-to-bulk
@katmarkham Could you please take a look at the user-facing message about the breaking change? Thank you. |
…migrate-product-images-variants-to-bulk
…migrate-product-images-variants-to-bulk
product images
and product variants
to GraphQL BULK
products
, product images
and product variants
to GraphQL BULK
…migrate-product-images-variants-to-bulk
This comment was marked as outdated.
This comment was marked as outdated.
The |
…migrate-product-images-variants-to-bulk
…migrate-product-images-variants-to-bulk
…migrate-product-images-variants-to-bulk
This comment was marked as outdated.
This comment was marked as outdated.
I feel uneasy to accept those live testing results without explaining those gaps:
|
…migrate-product-images-variants-to-bulk
…migrate-product-images-variants-to-bulk
Because of the inability to test using CHANGES (REGRESSION) TEST PLAN
COMMANDS:FULL-REFRESH## CONTROL
docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-shopify:latest read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json --debug > control.json ## TARGET
docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-shopify:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json --debug > target.json INCREMENTAL## CONTROL
docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-shopify:latest read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json --state /integration_tests/control_state.json --debug > control_inc.json ## TARGET
docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integration_tests airbyte/source-shopify:dev read --config /secrets/config.json --catalog /integration_tests/configured_catalog.json --state /integration_tests/target_state.json --debug > target_inc.json Test Criteria:
Test Results ( PII - free ):cc @maxi297 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shit Baz! Big thumbs up on documenting the changes for this PR. I really appreciate it as it help review and go back to those changes so that we understand why it was done like that. Kudos!
Based on the report:
The difference in records is explained by the fact we don't have the possibility to fetch the
deleted
records, usingGraphQL
. Thedeleted
records, are available usingREST
only.
Should we add that to the migration notes?
* In the `Product Variants` stream, the `presentment_prices.compare_at_price` property has changed from a `number` to an `object of strings`. This field was not populated in the `REST API` stream version, but it is correctly covered in the GraphQL stream version. | ||
* The `Product Variants` stream's `inventory_policy` and `inventory_management` properties now contain `uppercase string` values, instead of `lowercase`. | ||
* In the `Product Images` stream, the date-time fields, such as `created_at` and `updated_at`, now use `UTC` format without a timezone component. | ||
* In the `Product Images` stream, the `variant_ids` property is no longer available. Refer to the `Product variants` stream instead. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think position
is also missing based on the output you provided, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's not present in the record for the TARGET version, but schema didn't change. I'll add this mention.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Corrected.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hello, position is not missing but it always returns null values. Could you please investigate?
@@ -121,8 +121,17 @@ | |||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Based on the sample you provided, the control version has field image_id
while the target has image
. Is this expected? Should we document this as well?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, added the handling of that, we basically need to have image_id
at the root level, but graphql
nests it in "image":{"image_id": "gid://shopify/ProductImage/123456"}
. We don't have this populated for our sandbox, therefore it was Null
for the data and wasn't processed by far. Thanks for the notice!
Corrected. Updated the dedicated unit_test
to reflect this and updated the branch.
…migrate-product-images-variants-to-bulk
Hi @loris ! The breaking changes were introduced as part of 2.1.0. As this is a breaking change, the opt-in mechanism on cloud should kick in and you should see a prompt asking you to upgrade before 2024-06-10 |
@maxi297 Thanks for the clarification, I'm in discussion with cloud support because this is clearly not working as expected. In our production workspace, connections have been upgraded to 2.2 without any prompt (and thus broke our pipeline), while on our other workspaces, connections are still running Shopify 2.0 connector and we don't see any Upgrade prompt popping up. |
@maxi297 Actually I might have found the issue:
The breaking change message only states |
@loris This message included the In the migration guide here: https://github.com/airbytehq/airbyte/blob/e9e6cf3778caf804bc5d433ccda1530de1373a6d/docs/integrations/sources/shopify-migrations.md which comes with this release, we included all the details about the actual data change we discovered. Have you had a chance to observe this in the UI? Hope that answers your question and thank you for your feedback. |
Very clear!
This is the part which is confusing to me: No, I did not observe anything in the UI. I also have a workspace where Shopify connector are still running the 2.0 version and did not see any Upgrade banner. I have the email/webhook notifications set up, but nothing there too. |
This information will be helpful for us a well as maybe they is a gap we are not aware related to the opt-in mechanism. Please, keep us up to date on this one |
class Product(ShopifyBulkQuery): | ||
""" | ||
{ | ||
products(query: "updated_at:>='2020-01-20T00:00:00+00:00' AND updated_at:<'2024-04-25T00:00:00+00:00'", sortKey:UPDATED_AT) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@bazarnov Hi, out of curiosity, is this normal to have hard-coded updated_at values here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For the 'docstring' query example, I believe - yes.
Does this look wrong to you?
Should we have dynamic docstring for such cases?
If you can contribute to have the examples like this constructed dynamically, we would appreciate such improvements.
Thank you for your question, and feel free to add more.
What
Resolving:
How
Products
,Product Images
andProduct Variants
toShopify GQL BULK
product images
andproduct variants
streams, they should be independent to have the proper migration processquery.py
(BULK Queries module) with 3 more classes forProduct
,ProductImage
andProductVariant
queriesstream.py
to make the migrated streams inherit from theIncrementalShopifyGraphQlBulkStream
User Impact
There is a BREAKING CHANGE for the
product variants
stream STATE:Before:
Now:
Can this PR be safely reverted and rolled back?
Because the old STATE for
id
based values is still there for the STATE object, we can safely roll back when something is wrong.