+Chamikara Jayalath <[email protected]> any idea why this is still doing a runner api roundtrip and failing? It's a multi-language pipeline, and Alan has it configured to run on Dataflow runner V2.
On Fri, Nov 20, 2020 at 10:36 AM Alan Krumholz <[email protected]> wrote: > Just tried that and still getting this: > > ---------------------------------------------------------------------------KeyError > Traceback (most recent call > last)<ipython-input-81-a936d3a5fa70> in <module>----> 1 bq_to_snowflake( > 2 'ml-betterup.coach_search.distances', 3 > 'analytics.ml.coach_search_distances', 4 'master') > <ipython-input-78-096896321fde> in bq_to_snowflake(bq_table, snow_table, > git_branch) 138 ) 139 --> 140 result = pipeline.run() 141 > result.wait_until_finish() 142 > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in > run(self, test_runner_api) 512 # When possible, invoke a round trip > through the runner API. 513 if test_runner_api and > self._verify_runner_api_compatible():--> 514 return > Pipeline.from_runner_api( 515 > self.to_runner_api(use_fake_coders=True), 516 self.runner, > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in > from_runner_api(proto, runner, options, return_context, allow_proto_holders) > 890 requirements=proto.requirements) 891 root_transform_id, > = proto.root_transform_ids--> 892 p.transforms_stack = > [context.transforms.get_by_id(root_transform_id)] 893 # > TODO(robertwb): These are only needed to continue construction. Omit? 894 > p.applied_labels = { > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py > in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 > if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = > self._obj_type.from_runner_api( 116 self._id_to_proto[id], > self._pipeline_context) 117 return self._id_to_obj[id] > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in > from_runner_api(proto, context) 1277 result.parts = [] 1278 for > transform_id in proto.subtransforms:-> 1279 part = > context.transforms.get_by_id(transform_id) 1280 part.parent = result > 1281 result.parts.append(part) > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py > in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 > if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = > self._obj_type.from_runner_api( 116 self._id_to_proto[id], > self._pipeline_context) 117 return self._id_to_obj[id] > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in > from_runner_api(proto, context) 1277 result.parts = [] 1278 for > transform_id in proto.subtransforms:-> 1279 part = > context.transforms.get_by_id(transform_id) 1280 part.parent = result > 1281 result.parts.append(part) > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py > in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 > if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = > self._obj_type.from_runner_api( 116 self._id_to_proto[id], > self._pipeline_context) 117 return self._id_to_obj[id] > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in > from_runner_api(proto, context) 1277 result.parts = [] 1278 for > transform_id in proto.subtransforms:-> 1279 part = > context.transforms.get_by_id(transform_id) 1280 part.parent = result > 1281 result.parts.append(part) > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py > in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 > if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = > self._obj_type.from_runner_api( 116 self._id_to_proto[id], > self._pipeline_context) 117 return self._id_to_obj[id] > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in > from_runner_api(proto, context) 1277 result.parts = [] 1278 for > transform_id in proto.subtransforms:-> 1279 part = > context.transforms.get_by_id(transform_id) 1280 part.parent = result > 1281 result.parts.append(part) > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py > in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 > if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = > self._obj_type.from_runner_api( 116 self._id_to_proto[id], > self._pipeline_context) 117 return self._id_to_obj[id] > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in > from_runner_api(proto, context) 1216 > is_python_side_input(side_input_tags[0]) if side_input_tags else False) > 1217 -> 1218 transform = ptransform.PTransform.from_runner_api(proto, > context) 1219 if uses_python_sideinput_tags: 1220 # Ordering is > important here. > ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/transforms/ptransform.py > in from_runner_api(cls, proto, context) 688 if proto is None or > proto.spec is None or not proto.spec.urn: 689 return None--> 690 > parameter_type, constructor = cls._known_urns[proto.spec.urn] 691 692 > try: > KeyError: 'beam:transform:write_files:v1' > > > > On Fri, Nov 20, 2020 at 11:18 AM Brian Hulette <[email protected]> > wrote: > >> Hm try passing in the args as they would appear in >> `sys.argv`, PipelineOptions(['--experiments=use_runner_v2']) >> >> On Thu, Nov 19, 2020 at 12:14 PM Alan Krumholz <[email protected]> >> wrote: >> >>> How can I pass that flag using the SDK? >>> Tried this: >>> >>> pipeline = beam.Pipeline(options=PipelineOptions(experiments= >>>> ['use_runner_v2'], ...) >>> >>> >>> but still getting a similar error: >>> >>> ---------------------------------------------------------------------------KeyError >>> Traceback (most recent call >>> last)<ipython-input-69-a936d3a5fa70> in <module>----> 1 bq_to_snowflake( >>> 2 'ml-betterup.coach_search.distances', 3 >>> 'analytics.ml.coach_search_distances', 4 'master') >>> <ipython-input-66-2b6bf3c9334b> in bq_to_snowflake(bq_table, snow_table, >>> git_branch) 138 ) 139 --> 140 result = pipeline.run() 141 >>> result.wait_until_finish() 142 >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in >>> run(self, test_runner_api) 512 # When possible, invoke a round >>> trip through the runner API. 513 if test_runner_api and >>> self._verify_runner_api_compatible():--> 514 return >>> Pipeline.from_runner_api( 515 >>> self.to_runner_api(use_fake_coders=True), 516 self.runner, >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in >>> from_runner_api(proto, runner, options, return_context, >>> allow_proto_holders) 890 requirements=proto.requirements) 891 >>> root_transform_id, = proto.root_transform_ids--> 892 >>> p.transforms_stack = [context.transforms.get_by_id(root_transform_id)] >>> 893 # TODO(robertwb): These are only needed to continue construction. >>> Omit? 894 p.applied_labels = { >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>> in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 >>> if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = >>> self._obj_type.from_runner_api( 116 self._id_to_proto[id], >>> self._pipeline_context) 117 return self._id_to_obj[id] >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in >>> from_runner_api(proto, context) 1277 result.parts = [] 1278 for >>> transform_id in proto.subtransforms:-> 1279 part = >>> context.transforms.get_by_id(transform_id) 1280 part.parent = >>> result 1281 result.parts.append(part) >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>> in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 >>> if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = >>> self._obj_type.from_runner_api( 116 self._id_to_proto[id], >>> self._pipeline_context) 117 return self._id_to_obj[id] >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in >>> from_runner_api(proto, context) 1277 result.parts = [] 1278 for >>> transform_id in proto.subtransforms:-> 1279 part = >>> context.transforms.get_by_id(transform_id) 1280 part.parent = >>> result 1281 result.parts.append(part) >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>> in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 >>> if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = >>> self._obj_type.from_runner_api( 116 self._id_to_proto[id], >>> self._pipeline_context) 117 return self._id_to_obj[id] >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in >>> from_runner_api(proto, context) 1277 result.parts = [] 1278 for >>> transform_id in proto.subtransforms:-> 1279 part = >>> context.transforms.get_by_id(transform_id) 1280 part.parent = >>> result 1281 result.parts.append(part) >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>> in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 >>> if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = >>> self._obj_type.from_runner_api( 116 self._id_to_proto[id], >>> self._pipeline_context) 117 return self._id_to_obj[id] >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in >>> from_runner_api(proto, context) 1277 result.parts = [] 1278 for >>> transform_id in proto.subtransforms:-> 1279 part = >>> context.transforms.get_by_id(transform_id) 1280 part.parent = >>> result 1281 result.parts.append(part) >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>> in get_by_id(self, id) 113 # type: (str) -> PortableObjectT 114 >>> if id not in self._id_to_obj:--> 115 self._id_to_obj[id] = >>> self._obj_type.from_runner_api( 116 self._id_to_proto[id], >>> self._pipeline_context) 117 return self._id_to_obj[id] >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py in >>> from_runner_api(proto, context) 1216 >>> is_python_side_input(side_input_tags[0]) if side_input_tags else False) >>> 1217 -> 1218 transform = ptransform.PTransform.from_runner_api(proto, >>> context) 1219 if uses_python_sideinput_tags: 1220 # Ordering >>> is important here. >>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/transforms/ptransform.py >>> in from_runner_api(cls, proto, context) 688 if proto is None or >>> proto.spec is None or not proto.spec.urn: 689 return None--> 690 >>> parameter_type, constructor = cls._known_urns[proto.spec.urn] 691 >>> 692 try: >>> KeyError: 'beam:transform:write_files:v1' >>> >>> >>> >>> On Thu, Nov 19, 2020 at 2:18 PM Brian Hulette <[email protected]> >>> wrote: >>> >>>> Ah ok, you'll need to use Dataflow runner v2 [1] to run this pipeline >>>> (add the flag '--experiments=use_runner_v2'). See also [2]. >>>> >>>> [1] >>>> https://cloud.google.com/dataflow/docs/guides/deploying-a-pipeline#python_11 >>>> [2] >>>> https://cloud.google.com/blog/products/data-analytics/multi-language-sdks-for-building-cloud-pipelines >>>> >>>> On Thu, Nov 19, 2020 at 11:10 AM Alan Krumholz < >>>> [email protected]> wrote: >>>> >>>>> DataFlow runner >>>>> >>>>> On Thu, Nov 19, 2020 at 2:00 PM Brian Hulette <[email protected]> >>>>> wrote: >>>>> >>>>>> Hm what runner are you using? It looks like we're trying to encode >>>>>> and decode the pipeline proto, which isn't possible for a multi-language >>>>>> pipeline. Are you using a portable runner? >>>>>> >>>>>> Brian >>>>>> >>>>>> On Thu, Nov 19, 2020 at 10:42 AM Alan Krumholz < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> got it, thanks! >>>>>>> I was using: >>>>>>> 'xxxxxx.us-east-1' >>>>>>> Seems using this instead fixes that problem: >>>>>>> 'xxxxxx.us-east-1.snowflakecomputing.com >>>>>>> >>>>>>> I'm now hitting a different error though (now in python): >>>>>>> >>>>>>> <ipython-input-42-b27732a0a892> in bq_to_snowflake(bq_table, >>>>>>>> snow_table, git_branch) >>>>>>>> 161 ) >>>>>>>> 162 >>>>>>>> --> 163 result = pipeline.run() >>>>>>>> 164 result.wait_until_finish() >>>>>>>> 165 >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py >>>>>>>> in run(self, test_runner_api) >>>>>>>> 512 # When possible, invoke a round trip through the runner API. >>>>>>>> 513 if test_runner_api and self._verify_runner_api_compatible(): >>>>>>>> --> 514 return Pipeline.from_runner_api( 515 self.to_runner_api( >>>>>>>> use_fake_coders=True), >>>>>>>> 516 self.runner, >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py >>>>>>>> in from_runner_api(proto, runner, options, return_context, >>>>>>>> allow_proto_holders) >>>>>>>> 890 requirements=proto.requirements) >>>>>>>> 891 root_transform_id, = proto.root_transform_ids >>>>>>>> --> 892 p.transforms_stack = [context.transforms.get_by_id( >>>>>>>> root_transform_id)] >>>>>>>> 893 # TODO(robertwb): These are only needed to continue >>>>>>>> construction. Omit? >>>>>>>> 894 p.applied_labels = { >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>>>>>>> in get_by_id(self, id) >>>>>>>> 113 # type: (str) -> PortableObjectT >>>>>>>> 114 if id not in self._id_to_obj: >>>>>>>> --> 115 self._id_to_obj[id] = self._obj_type.from_runner_api( 116 >>>>>>>> self._id_to_proto[id], self._pipeline_context) >>>>>>>> 117 return self._id_to_obj[id] >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py >>>>>>>> in from_runner_api(proto, context) >>>>>>>> 1277 result.parts = [] >>>>>>>> 1278 for transform_id in proto.subtransforms: >>>>>>>> -> 1279 part = context.transforms.get_by_id(transform_id) >>>>>>>> 1280 part.parent = result >>>>>>>> 1281 result.parts.append(part) >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>>>>>>> in get_by_id(self, id) >>>>>>>> 113 # type: (str) -> PortableObjectT >>>>>>>> 114 if id not in self._id_to_obj: >>>>>>>> --> 115 self._id_to_obj[id] = self._obj_type.from_runner_api( 116 >>>>>>>> self._id_to_proto[id], self._pipeline_context) >>>>>>>> 117 return self._id_to_obj[id] >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py >>>>>>>> in from_runner_api(proto, context) >>>>>>>> 1277 result.parts = [] >>>>>>>> 1278 for transform_id in proto.subtransforms: >>>>>>>> -> 1279 part = context.transforms.get_by_id(transform_id) >>>>>>>> 1280 part.parent = result >>>>>>>> 1281 result.parts.append(part) >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>>>>>>> in get_by_id(self, id) >>>>>>>> 113 # type: (str) -> PortableObjectT >>>>>>>> 114 if id not in self._id_to_obj: >>>>>>>> --> 115 self._id_to_obj[id] = self._obj_type.from_runner_api( 116 >>>>>>>> self._id_to_proto[id], self._pipeline_context) >>>>>>>> 117 return self._id_to_obj[id] >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py >>>>>>>> in from_runner_api(proto, context) >>>>>>>> 1277 result.parts = [] >>>>>>>> 1278 for transform_id in proto.subtransforms: >>>>>>>> -> 1279 part = context.transforms.get_by_id(transform_id) >>>>>>>> 1280 part.parent = result >>>>>>>> 1281 result.parts.append(part) >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>>>>>>> in get_by_id(self, id) >>>>>>>> 113 # type: (str) -> PortableObjectT >>>>>>>> 114 if id not in self._id_to_obj: >>>>>>>> --> 115 self._id_to_obj[id] = self._obj_type.from_runner_api( 116 >>>>>>>> self._id_to_proto[id], self._pipeline_context) >>>>>>>> 117 return self._id_to_obj[id] >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py >>>>>>>> in from_runner_api(proto, context) >>>>>>>> 1277 result.parts = [] >>>>>>>> 1278 for transform_id in proto.subtransforms: >>>>>>>> -> 1279 part = context.transforms.get_by_id(transform_id) >>>>>>>> 1280 part.parent = result >>>>>>>> 1281 result.parts.append(part) >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/runners/pipeline_context.py >>>>>>>> in get_by_id(self, id) >>>>>>>> 113 # type: (str) -> PortableObjectT >>>>>>>> 114 if id not in self._id_to_obj: >>>>>>>> --> 115 self._id_to_obj[id] = self._obj_type.from_runner_api( 116 >>>>>>>> self._id_to_proto[id], self._pipeline_context) >>>>>>>> 117 return self._id_to_obj[id] >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/pipeline.py >>>>>>>> in from_runner_api(proto, context) >>>>>>>> 1216 is_python_side_input(side_input_tags[0]) if side_input_tags >>>>>>>> else False) >>>>>>>> 1217 >>>>>>>> -> 1218 transform = ptransform.PTransform.from_runner_api(proto, >>>>>>>> context) >>>>>>>> 1219 if uses_python_sideinput_tags: >>>>>>>> 1220 # Ordering is important here. >>>>>>>> ~/opt/anaconda3/lib/python3.8/site-packages/apache_beam/transforms/ptransform.py >>>>>>>> in from_runner_api(cls, proto, context) >>>>>>>> 688 if proto is None or proto.spec is None or not proto.spec.urn: >>>>>>>> 689 return None >>>>>>>> --> 690 parameter_type, constructor = cls._known_urns[proto.spec. >>>>>>>> urn] >>>>>>>> 691 >>>>>>>> 692 try: KeyError: 'beam:transform:write_files:v1' >>>>>>> >>>>>>> >>>>>>> >>>>>>> I'll keep trying to make this work but sharing it in case you can >>>>>>> easily see what the problem is >>>>>>> >>>>>>> Thanks so much! >>>>>>> >>>>>>> On Thu, Nov 19, 2020 at 1:30 PM Brian Hulette <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi Alan, >>>>>>>> Sorry this error message is so verbose. What are you passing for >>>>>>>> the server_name argument [1]? It looks like that's what the Java >>>>>>>> stacktrace is complaining about: >>>>>>>> >>>>>>>> java.lang.IllegalArgumentException: serverName must be in format >>>>>>>> <account_name>.snowflakecomputing.com >>>>>>>> >>>>>>>> [1] >>>>>>>> https://github.com/apache/beam/blob/master/sdks/python/apache_beam/io/snowflake.py#L302 >>>>>>>> >>>>>>>> On Thu, Nov 19, 2020 at 10:16 AM Alan Krumholz < >>>>>>>> [email protected]> wrote: >>>>>>>> >>>>>>>>> I'm trying to replace my custom/problematic snowflake sink with >>>>>>>>> the new: >>>>>>>>> https://beam.apache.org/documentation/io/built-in/snowflake/#writing-to-snowflake >>>>>>>>> >>>>>>>>> However when I try to run my pipeline (using python) I get this >>>>>>>>> Java error: >>>>>>>>> >>>>>>>>> RuntimeError: java.lang.RuntimeException: Failed to build >>>>>>>>>> transform beam:external:java:snowflake:write:v1 from spec urn: >>>>>>>>>> "beam:external:java:snowflake:write:v1" >>>>>>>>> >>>>>>>>> >>>>>>>>> It is hard to understand why it is failing from reading the partial >>>>>>>>> java error trace I get in the output: >>>>>>>>> >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.expansion.service.ExpansionService$ExternalTransformRegistrarLoader.lambda$knownTransforms$0(ExpansionService.java:130) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.expansion.service.ExpansionService$TransformProvider.apply(ExpansionService.java:357) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.expansion.service.ExpansionService.expand(ExpansionService.java:433) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.expansion.service.ExpansionService.expand(ExpansionService.java:488) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.model.expansion.v1.ExpansionServiceGrpc$MethodHandlers.invoke(ExpansionServiceGrpc.java:232) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.vendor.grpc.v1p26p0.io.grpc.stub.ServerCalls$UnaryServerCallHandler$UnaryServerCallListener.onHalfClose(ServerCalls.java:172) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.vendor.grpc.v1p26p0.io.grpc.internal.ServerCallImpl$ServerStreamListenerImpl.halfClosed(ServerCallImpl.java:331) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.vendor.grpc.v1p26p0.io.grpc.internal.ServerImpl$JumpToApplicationThreadServerStreamListener$1HalfClosed.runInContext(ServerImpl.java:817) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.vendor.grpc.v1p26p0.io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.vendor.grpc.v1p26p0.io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:123) >>>>>>>>>> at >>>>>>>>>> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) >>>>>>>>>> at >>>>>>>>>> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) >>>>>>>>>> at java.base/java.lang.Thread.run(Thread.java:832) >>>>>>>>>> Caused by: java.lang.IllegalArgumentException: serverName must be in >>>>>>>>>> format <account_name>.snowflakecomputing.com >>>>>>>>>> at >>>>>>>>>> org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkArgument(Preconditions.java:141) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.io.snowflake.SnowflakeIO$DataSourceConfiguration.withServerName(SnowflakeIO.java:1700) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.io.snowflake.crosslanguage.CrossLanguageConfiguration.getDataSourceConfiguration(CrossLanguageConfiguration.java:166) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.io.snowflake.crosslanguage.WriteBuilder.buildExternal(WriteBuilder.java:78) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.io.snowflake.crosslanguage.WriteBuilder.buildExternal(WriteBuilder.java:34) >>>>>>>>>> at >>>>>>>>>> org.apache.beam.sdk.expansion.service.ExpansionService$ExternalTransformRegistrarLoader.lambda$knownTransforms$0(ExpansionService.java:125) >>>>>>>>>> ... 12 more >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> any clue how I can debug/fix this using python? >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>
