You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@beam.apache.org by GitBox <gi...@apache.org> on 2022/04/29 16:02:57 UTC

[GitHub] [beam] Firlej opened a new pull request, #17507: [BEAM-14383] Improve "FailedRows" errors returned by beam.io.WriteToBigQuery

Firlej opened a new pull request, #17507:
URL: https://github.com/apache/beam/pull/17507

   `WriteToBigQuery` pipeline returns `errors` when trying to insert rows that do not match the BigQuery table schema. `errors` is a dictionary that cointains one `FailedRows` key. `FailedRows` is a list of tuples where each tuple has two elements: BigQuery table name and the row that didn't match the schema.
   
   This can be verified by running the `BigQueryIO deadletter pattern` https://beam.apache.org/documentation/patterns/bigqueryio/
   
   Using the template approach I can print the failed rows in a pipeline. When running the job, logger simultaneously prints out the reason why the rows were invalid. 
   
   The reason (for why the row is invalid) should also be included in the tuple in addition to the BigQuery table and the raw row. This way next pipeline could eg. insert the invalid rows into a different BigQuery table with a schema.
   ```python
   error_schema = (
       {
           'fields': [
               {'name': 'timestamp', 'type': 'TIMESTAMP', 'mode': 'REQUIRED'},
               {'name': 'table', 'type': 'STRING', 'mode': 'REQUIRED'},
               {'name': 'reason', 'type': 'STRING', 'mode': 'NULLABLE'},
               {'name': 'row_json', 'type': 'STRING', 'mode': 'REQUIRED'},
           ]
       }
   )
   ```
   
   The whole pipeline implementation could look something like this
   ```python
   with beam.Pipeline(options=pipeline_options) as p:
   
       errors = (
           p
           | "Read from Pub/Sub subscription" >> beam.io.gcp.pubsub.ReadFromPubSub(
               subscription=known_args.input_subscription,
               timestamp_attribute=None)
           | "UTF-8 bytes to string" >> beam.Map(lambda msg: msg.decode("utf-8"))
           | "Parse JSON messages" >> beam.Map(json.loads)
           | "WriteToBigQuery" >> beam.io.WriteToBigQuery(
               known_args.output_table,
               schema=schema,
               create_disposition=beam.io.BigQueryDisposition.CREATE_NEVER,
               write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
               ignore_unknown_columns=False,
               insert_retry_strategy=RetryStrategy.RETRY_ON_TRANSIENT_ERROR
           )
       )
       
       result = (
           errors["FailedRows"]
           | 'ParseErrors' >> beam.Map(lambda err: {
                   "timestamp": time.time_ns() / 1000000000,
                   "table": err[0],
                   "reason": None, # TODO to be replaced with `err[2]`
                   "row_json": json.dumps(err[1]),
               })
           | "WriteErrorsToBigQuery" >> beam.io.WriteToBigQuery(
               known_args.output_table + "_error_records",
               schema=error_schema,
               create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED,
               write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
               ignore_unknown_columns=False,
               insert_retry_strategy=RetryStrategy.RETRY_ON_TRANSIENT_ERROR
           )
       )
   ```
   
   During my reasearch i found a couple of alternate solutions, but i think they are more complex than they need to be. Thats why I explored the beam source code and found the solution to be an easy and simple change.
   
   ------------------------
   
   Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:
   
    - [ ] [**Choose reviewer(s)**](https://beam.apache.org/contribute/#make-your-change) and mention them in a comment (`R: @username`).
    - [x] Format the pull request title like `[BEAM-XXX] Fixes bug in ApproximateQuantiles`, where you replace `BEAM-XXX` with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
    - [ ] Update `CHANGES.md` with noteworthy changes.
    - [ ] If this contribution is large, please file an Apache [Individual Contributor License Agreement](https://www.apache.org/licenses/icla.pdf).
   
   See the [Contributor Guide](https://beam.apache.org/contribute) for more tips on [how to make review process smoother](https://beam.apache.org/contribute/#make-reviewers-job-easier).
   
   To check the build health, please visit [https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md](https://github.com/apache/beam/blob/master/.test-infra/BUILD_STATUS.md)
   
   GitHub Actions Tests Status (on master branch)
   ------------------------------------------------------------------------------------------------
   [![Build python source distribution and wheels](https://github.com/apache/beam/workflows/Build%20python%20source%20distribution%20and%20wheels/badge.svg?branch=master&event=schedule)](https://github.com/apache/beam/actions?query=workflow%3A%22Build+python+source+distribution+and+wheels%22+branch%3Amaster+event%3Aschedule)
   [![Python tests](https://github.com/apache/beam/workflows/Python%20tests/badge.svg?branch=master&event=schedule)](https://github.com/apache/beam/actions?query=workflow%3A%22Python+Tests%22+branch%3Amaster+event%3Aschedule)
   [![Java tests](https://github.com/apache/beam/workflows/Java%20Tests/badge.svg?branch=master&event=schedule)](https://github.com/apache/beam/actions?query=workflow%3A%22Java+Tests%22+branch%3Amaster+event%3Aschedule)
   
   See [CI.md](https://github.com/apache/beam/blob/master/CI.md) for more information about GitHub Actions CI.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@beam.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [beam] Firlej closed pull request #17507: [BEAM-14383] Improve "FailedRows" errors returned by beam.io.WriteToBigQuery

Posted by GitBox <gi...@apache.org>.
Firlej closed pull request #17507: [BEAM-14383] Improve "FailedRows" errors returned by beam.io.WriteToBigQuery
URL: https://github.com/apache/beam/pull/17507


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@beam.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [beam] asf-ci commented on pull request #17507: [BEAM-14383] Improve "FailedRows" errors returned by beam.io.WriteToBigQuery

Posted by GitBox <gi...@apache.org>.
asf-ci commented on PR #17507:
URL: https://github.com/apache/beam/pull/17507#issuecomment-1113481179

   Can one of the admins verify this patch?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@beam.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [beam] codecov[bot] commented on pull request #17507: [BEAM-14383] Improve "FailedRows" errors returned by beam.io.WriteToBigQuery

Posted by GitBox <gi...@apache.org>.
codecov[bot] commented on PR #17507:
URL: https://github.com/apache/beam/pull/17507#issuecomment-1113499527

   # [Codecov](https://codecov.io/gh/apache/beam/pull/17507?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) Report
   > Merging [#17507](https://codecov.io/gh/apache/beam/pull/17507?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (bed9d5c) into [master](https://codecov.io/gh/apache/beam/commit/83a8855e5997e0311e6274c03bcb38f94efbf8ef?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) (83a8855) will **increase** coverage by `0.00%`.
   > The diff coverage is `100.00%`.
   
   ```diff
   @@           Coverage Diff           @@
   ##           master   #17507   +/-   ##
   =======================================
     Coverage   73.83%   73.83%           
   =======================================
     Files         690      690           
     Lines       90830    90843   +13     
   =======================================
   + Hits        67065    67076   +11     
   - Misses      22556    22558    +2     
     Partials     1209     1209           
   ```
   
   | Flag | Coverage Δ | |
   |---|---|---|
   | python | `83.65% <100.00%> (+<0.01%)` | :arrow_up: |
   
   Flags with carried forward coverage won't be shown. [Click here](https://docs.codecov.io/docs/carryforward-flags?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#carryforward-flags-in-the-pull-request-comment) to find out more.
   
   | [Impacted Files](https://codecov.io/gh/apache/beam/pull/17507?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation) | Coverage Δ | |
   |---|---|---|
   | [sdks/python/apache\_beam/io/gcp/bigquery.py](https://codecov.io/gh/apache/beam/pull/17507/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c2Rrcy9weXRob24vYXBhY2hlX2JlYW0vaW8vZ2NwL2JpZ3F1ZXJ5LnB5) | `63.76% <100.00%> (ø)` | |
   | [sdks/python/apache\_beam/utils/interactive\_utils.py](https://codecov.io/gh/apache/beam/pull/17507/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c2Rrcy9weXRob24vYXBhY2hlX2JlYW0vdXRpbHMvaW50ZXJhY3RpdmVfdXRpbHMucHk=) | `92.68% <0.00%> (-2.44%)` | :arrow_down: |
   | [...ks/python/apache\_beam/runners/worker/sdk\_worker.py](https://codecov.io/gh/apache/beam/pull/17507/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c2Rrcy9weXRob24vYXBhY2hlX2JlYW0vcnVubmVycy93b3JrZXIvc2RrX3dvcmtlci5weQ==) | `88.90% <0.00%> (-0.16%)` | :arrow_down: |
   | [...hon/apache\_beam/runners/worker/bundle\_processor.py](https://codecov.io/gh/apache/beam/pull/17507/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c2Rrcy9weXRob24vYXBhY2hlX2JlYW0vcnVubmVycy93b3JrZXIvYnVuZGxlX3Byb2Nlc3Nvci5weQ==) | `93.51% <0.00%> (ø)` | |
   | [sdks/python/apache\_beam/transforms/util.py](https://codecov.io/gh/apache/beam/pull/17507/diff?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation#diff-c2Rrcy9weXRob24vYXBhY2hlX2JlYW0vdHJhbnNmb3Jtcy91dGlsLnB5) | `96.06% <0.00%> (+0.08%)` | :arrow_up: |
   
   ------
   
   [Continue to review full report at Codecov](https://codecov.io/gh/apache/beam/pull/17507?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   > **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation)
   > `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
   > Powered by [Codecov](https://codecov.io/gh/apache/beam/pull/17507?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Last update [83a8855...bed9d5c](https://codecov.io/gh/apache/beam/pull/17507?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=The+Apache+Software+Foundation).
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@beam.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [beam] Firlej commented on pull request #17507: [BEAM-14383] Improve "FailedRows" errors returned by beam.io.WriteToBigQuery

Posted by GitBox <gi...@apache.org>.
Firlej commented on PR #17507:
URL: https://github.com/apache/beam/pull/17507#issuecomment-1113514147

   R: @jrmccluskey


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@beam.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [beam] asf-ci commented on pull request #17507: [BEAM-14383] Improve "FailedRows" errors returned by beam.io.WriteToBigQuery

Posted by GitBox <gi...@apache.org>.
asf-ci commented on PR #17507:
URL: https://github.com/apache/beam/pull/17507#issuecomment-1113481180

   Can one of the admins verify this patch?


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@beam.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org