{"record":{"id":"3aeb8b429c9ebc5b","repo":"apache/beam","slug":"error-creating-data-catalog-client","errorCode":null,"errorMessage":"Error creating Data Catalog client","messagePattern":"Error creating Data Catalog client","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/sql/datacatalog/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/datacatalog/DataCatalogTableProvider.java","lineNumber":185,"sourceCode":"          .lookupEntrySettings()\n          .setRetryableCodes(\n              ImmutableSet.of(Code.PERMISSION_DENIED, Code.DEADLINE_EXCEEDED, Code.UNAVAILABLE))\n          .setRetrySettings(\n              builder.lookupEntrySettings().getRetrySettings().toBuilder()\n                  .setMaxRetryDelay(Duration.ofMinutes(1L))\n                  .build());\n      builder\n          .updateEntrySettings()\n          .setRetryableCodes(\n              ImmutableSet.of(Code.PERMISSION_DENIED, Code.DEADLINE_EXCEEDED, Code.UNAVAILABLE))\n          .setRetrySettings(\n              builder.updateEntrySettings().getRetrySettings().toBuilder()\n                  .setMaxRetryDelay(Duration.ofMinutes(1L))\n                  .build());\n\n      return DataCatalogClient.create(builder.build());\n    } catch (IOException e) {\n      throw new RuntimeException(\"Error creating Data Catalog client\", e);\n    }\n  }\n\n  private Table toCalciteTable(String tableName, Entry entry) {\n    if (entry.getSchema().getColumnsCount() == 0) {\n      throw new UnsupportedOperationException(\n          \"Entry doesn't have a schema. Please attach a schema to '\"\n              + tableName\n              + \"' in Data Catalog: \"\n              + entry.toString());\n    }\n    Schema schema = SchemaUtils.fromDataCatalog(entry.getSchema());\n\n    Optional<Table.Builder> tableBuilder = tableFactory.tableBuilder(entry);\n    if (!tableBuilder.isPresent()) {\n      throw new UnsupportedOperationException(\n          String.format(\n              \"Unsupported Data Catalog entry: %s\",","sourceCodeStart":167,"sourceCodeEnd":203,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/sql/datacatalog/src/main/java/org/apache/beam/sdk/extensions/sql/meta/provider/datacatalog/DataCatalogTableProvider.java#L167-L203","documentation":"createDataCatalogClient builds a DataCatalogClient with custom retry settings; if client construction throws IOException (credentials unavailable, transport failure, bad endpoint), it is rethrown as RuntimeException(\"Error creating Data Catalog client\", e). This happens at provider creation time, before any table lookup.","triggerScenarios":"Calling DataCatalogTableProvider.create(...) with an environment lacking valid Google credentials, network/firewall issues reaching datacatalog.googleapis.com, or misconfigured endpoints/proxy settings.","commonSituations":"Running outside GCP without GOOGLE_APPLICATION_CREDENTIALS set, service accounts missing Data Catalog API enablement, blocked egress in CI, or an expired/invalid credentials file.","solutions":["Set up valid Application Default Credentials (GOOGLE_APPLICATION_CREDENTIALS or gcloud auth application-default login).","Verify network access to datacatalog.googleapis.com and that the Data Catalog API is enabled on the project.","Inspect the wrapped IOException cause for the specific transport/credential failure; check any custom endpoint/proxy configuration."],"exampleFix":"// before\n// no credentials configured\nDataCatalogTableProvider provider = DataCatalogTableProvider.create(options);\n\n// after (shell)\n// export GOOGLE_APPLICATION_CREDENTIALS=/path/to/sa.json\nDataCatalogTableProvider provider = DataCatalogTableProvider.create(options);","handlingStrategy":"try-catch","validationCode":"// fail fast before creating the provider\nif (System.getenv(\"GOOGLE_APPLICATION_CREDENTIALS\") == null\n    && !new File(\n        System.getProperty(\"user.home\") + \"/.config/gcloud/application_default_credentials.json\")\n        .exists()) {\n  throw new IllegalStateException(\"No Google Application Default Credentials found\");\n}","typeGuard":null,"tryCatchPattern":"try {\n  DataCatalogTableProvider p = DataCatalogTableProvider.create(options);\n} catch (RuntimeException e) {\n  if (e.getMessage().contains(\"Error creating Data Catalog client\")) {\n    // inspect e.getCause() (IOException) for credential/transport failure\n  }\n}","preventionTips":["Set GOOGLE_APPLICATION_CREDENTIALS or run gcloud auth application-default login","Verify datacatalog.googleapis.com is reachable and API-enabled","Test credentials with a trivial DataCatalogClient lookup before pipeline startup"],"tags":["apache-beam","datacatalog","java","gcp","credentials"],"backgroundTag":"missing-credentials","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}