[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M69AQAYBC1GHEFS91R3M9XFN":3,"skill-same:01M69AQAYBC1GHEFS91R3M9XFN":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":56,"repositoryHtmlUrl":57,"repositoryHomepageUrl":58,"ownerHtmlUrl":59,"ownerBlogUrl":60,"ownerDescription":61,"updatedAt":62,"install":63,"resources":76},"01M69AQAYBC1GHEFS91R3M9XFN","azure-data-tables-java",null,"Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.","microsoft\u002Fskills","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M69AJYYW4E1RMSYCQDJ4FJSH",3195,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fplugins\u002Fazure-sdk-java\u002Fskills\u002Fazure-data-tables-java\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,9,43,44],"azure","azure data tables java","java","data","tables","table","when","value","for","at","key-value","azure table storage","cosmos","db","use","structured data","api","applications","nosql","storage","sdk","2026-11-10 10:12:30",false,"---\nname: azure-data-tables-java\ndescription: Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.\nlicense: MIT\nmetadata:\n  author: Microsoft\n  version: \"1.0.0\"\n  package: com.azure:azure-data-tables\n---\n\n# Azure Tables SDK for Java\n\nBuild table storage applications using the Azure Tables SDK for Java. Works with both Azure Table Storage and Cosmos DB Table API.\n\n## Installation\n\n```xml\n\u003Cdependency>\n  \u003CgroupId>com.azure\u003C\u002FgroupId>\n  \u003CartifactId>azure-data-tables\u003C\u002FartifactId>\n  \u003Cversion>12.6.0-beta.1\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Client Creation\n\n### With Connection String\n\n```java\nimport com.azure.data.tables.TableServiceClient;\nimport com.azure.data.tables.TableServiceClientBuilder;\nimport com.azure.data.tables.TableClient;\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .connectionString(\"\u003Cyour-connection-string>\")\n    .buildClient();\n```\n\n### With Shared Key\n\n```java\nimport com.azure.core.credential.AzureNamedKeyCredential;\n\nAzureNamedKeyCredential credential = new AzureNamedKeyCredential(\n    \"\u003Caccount-name>\",\n    \"\u003Caccount-key>\");\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"\u003Cyour-table-account-url>\")\n    .credential(credential)\n    .buildClient();\n```\n\n### With SAS Token\n\n```java\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"\u003Cyour-table-account-url>\")\n    .sasToken(\"\u003Csas-token>\")\n    .buildClient();\n```\n\n### With DefaultAzureCredential (Storage only)\n\n```java\nimport com.azure.core.credential.TokenCredential;\nimport com.azure.identity.AzureIdentityEnvVars;\nimport com.azure.identity.DefaultAzureCredentialBuilder;\nimport com.azure.identity.ManagedIdentityCredentialBuilder;\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nTokenCredential credential = new DefaultAzureCredentialBuilder()\n    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)\n    .build();\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fjava\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-java-stable#credential-classes\n\u002F\u002F TokenCredential credential = new ManagedIdentityCredentialBuilder().build();\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"\u003Cyour-table-account-url>\")\n    .credential(credential)\n    .buildClient();\n```\n\n## Key Concepts\n\n- **TableServiceClient**: Manage tables (create, list, delete)\n- **TableClient**: Manage entities within a table (CRUD)\n- **Partition Key**: Groups entities for efficient queries\n- **Row Key**: Unique identifier within a partition\n- **Entity**: A row with up to 252 properties (1MB Storage, 2MB Cosmos)\n\n## Core Patterns\n\n### Create Table\n\n```java\n\u002F\u002F Create table (throws if exists)\nTableClient tableClient = serviceClient.createTable(\"mytable\");\n\n\u002F\u002F Create if not exists (no exception)\nTableClient tableClient = serviceClient.createTableIfNotExists(\"mytable\");\n```\n\n### Get Table Client\n\n```java\n\u002F\u002F From service client\nTableClient tableClient = serviceClient.getTableClient(\"mytable\");\n\n\u002F\u002F Direct construction\nTableClient tableClient = new TableClientBuilder()\n    .connectionString(\"\u003Cconnection-string>\")\n    .tableName(\"mytable\")\n    .buildClient();\n```\n\n### Create Entity\n\n```java\nimport com.azure.data.tables.models.TableEntity;\n\nTableEntity entity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Name\", \"Product A\")\n    .addProperty(\"Price\", 29.99)\n    .addProperty(\"Quantity\", 100)\n    .addProperty(\"IsAvailable\", true);\n\ntableClient.createEntity(entity);\n```\n\n### Get Entity\n\n```java\nTableEntity entity = tableClient.getEntity(\"partitionKey\", \"rowKey\");\n\nString name = (String) entity.getProperty(\"Name\");\nDouble price = (Double) entity.getProperty(\"Price\");\nSystem.out.printf(\"Product: %s, Price: %.2f%n\", name, price);\n```\n\n### Update Entity\n\n```java\nimport com.azure.data.tables.models.TableEntityUpdateMode;\n\n\u002F\u002F Merge (update only specified properties)\nTableEntity updateEntity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Price\", 24.99);\ntableClient.updateEntity(updateEntity, TableEntityUpdateMode.MERGE);\n\n\u002F\u002F Replace (replace entire entity)\nTableEntity replaceEntity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Name\", \"Product A Updated\")\n    .addProperty(\"Price\", 24.99)\n    .addProperty(\"Quantity\", 150);\ntableClient.updateEntity(replaceEntity, TableEntityUpdateMode.REPLACE);\n```\n\n### Upsert Entity\n\n```java\n\u002F\u002F Insert or update (merge mode)\ntableClient.upsertEntity(entity, TableEntityUpdateMode.MERGE);\n\n\u002F\u002F Insert or replace\ntableClient.upsertEntity(entity, TableEntityUpdateMode.REPLACE);\n```\n\n### Delete Entity\n\n```java\ntableClient.deleteEntity(\"partitionKey\", \"rowKey\");\n```\n\n### List Entities\n\n```java\nimport com.azure.data.tables.models.ListEntitiesOptions;\n\n\u002F\u002F List all entities\nfor (TableEntity entity : tableClient.listEntities()) {\n    System.out.printf(\"%s - %s%n\",\n        entity.getPartitionKey(),\n        entity.getRowKey());\n}\n\n\u002F\u002F With filtering and selection\nListEntitiesOptions options = new ListEntitiesOptions()\n    .setFilter(\"PartitionKey eq 'sales'\")\n    .setSelect(\"Name\", \"Price\");\n\nfor (TableEntity entity : tableClient.listEntities(options, null, null)) {\n    System.out.printf(\"%s: %.2f%n\",\n        entity.getProperty(\"Name\"),\n        entity.getProperty(\"Price\"));\n}\n```\n\n### Query with OData Filter\n\n```java\n\u002F\u002F Filter by partition key\nListEntitiesOptions options = new ListEntitiesOptions()\n    .setFilter(\"PartitionKey eq 'electronics'\");\n\n\u002F\u002F Filter with multiple conditions\noptions.setFilter(\"PartitionKey eq 'electronics' and Price gt 100\");\n\n\u002F\u002F Filter with comparison operators\noptions.setFilter(\"Quantity ge 10 and Quantity le 100\");\n\n\u002F\u002F Top N results\noptions.setTop(10);\n\nfor (TableEntity entity : tableClient.listEntities(options, null, null)) {\n    System.out.println(entity.getRowKey());\n}\n```\n\n### Batch Operations (Transactions)\n\n```java\nimport com.azure.data.tables.models.TableTransactionAction;\nimport com.azure.data.tables.models.TableTransactionActionType;\nimport java.util.Arrays;\n\n\u002F\u002F All entities must have same partition key\nList\u003CTableTransactionAction> actions = Arrays.asList(\n    new TableTransactionAction(\n        TableTransactionActionType.CREATE,\n        new TableEntity(\"batch\", \"row1\").addProperty(\"Name\", \"Item 1\")),\n    new TableTransactionAction(\n        TableTransactionActionType.CREATE,\n        new TableEntity(\"batch\", \"row2\").addProperty(\"Name\", \"Item 2\")),\n    new TableTransactionAction(\n        TableTransactionActionType.UPSERT_MERGE,\n        new TableEntity(\"batch\", \"row3\").addProperty(\"Name\", \"Item 3\"))\n);\n\ntableClient.submitTransaction(actions);\n```\n\n### List Tables\n\n```java\nimport com.azure.data.tables.models.TableItem;\nimport com.azure.data.tables.models.ListTablesOptions;\n\n\u002F\u002F List all tables\nfor (TableItem table : serviceClient.listTables()) {\n    System.out.println(table.getName());\n}\n\n\u002F\u002F Filter tables\nListTablesOptions options = new ListTablesOptions()\n    .setFilter(\"TableName eq 'mytable'\");\n\nfor (TableItem table : serviceClient.listTables(options, null, null)) {\n    System.out.println(table.getName());\n}\n```\n\n### Delete Table\n\n```java\nserviceClient.deleteTable(\"mytable\");\n```\n\n## Typed Entities\n\n```java\npublic class Product implements TableEntity {\n    private String partitionKey;\n    private String rowKey;\n    private OffsetDateTime timestamp;\n    private String eTag;\n    private String name;\n    private double price;\n    \n    \u002F\u002F Getters and setters for all fields\n    @Override\n    public String getPartitionKey() { return partitionKey; }\n    @Override\n    public void setPartitionKey(String partitionKey) { this.partitionKey = partitionKey; }\n    @Override\n    public String getRowKey() { return rowKey; }\n    @Override\n    public void setRowKey(String rowKey) { this.rowKey = rowKey; }\n    \u002F\u002F ... other getters\u002Fsetters\n    \n    public String getName() { return name; }\n    public void setName(String name) { this.name = name; }\n    public double getPrice() { return price; }\n    public void setPrice(double price) { this.price = price; }\n}\n\n\u002F\u002F Usage\nProduct product = new Product();\nproduct.setPartitionKey(\"electronics\");\nproduct.setRowKey(\"laptop-001\");\nproduct.setName(\"Laptop\");\nproduct.setPrice(999.99);\n\ntableClient.createEntity(product);\n```\n\n## Error Handling\n\n```java\nimport com.azure.data.tables.models.TableServiceException;\n\ntry {\n    tableClient.createEntity(entity);\n} catch (TableServiceException e) {\n    System.out.println(\"Status: \" + e.getResponse().getStatusCode());\n    System.out.println(\"Error: \" + e.getMessage());\n    \u002F\u002F 409 = Conflict (entity exists)\n    \u002F\u002F 404 = Not Found\n}\n```\n\n## Environment Variables\n\n```bash\n# Storage Account\nAZURE_TABLES_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...  # Alternative to Entra ID auth\nAZURE_TABLES_ENDPOINT=https:\u002F\u002F\u003Caccount>.table.core.windows.net  # Required for all auth methods\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\n\n# Cosmos DB Table API\nCOSMOS_TABLE_ENDPOINT=https:\u002F\u002F\u003Caccount>.table.cosmosdb.azure.com  # Alternative endpoint for Cosmos DB Table API\n```\n\n## Best Practices\n\n1. **Partition Key Design**: Choose keys that distribute load evenly\n2. **Batch Operations**: Use transactions for atomic multi-entity updates\n3. **Query Optimization**: Always filter by PartitionKey when possible\n4. **Select Projection**: Only select needed properties for performance\n5. **Entity Size**: Keep entities under 1MB (Storage) or 2MB (Cosmos)\n\n## Trigger Phrases\n\n- \"Azure Tables Java\"\n- \"table storage SDK\"\n- \"Cosmos DB Table API\"\n- \"NoSQL key-value storage\"\n- \"partition key row key\"\n- \"table entity CRUD\"\n","# Azure Tables SDK for Java\n\nBuild table storage applications using the Azure Tables SDK for Java. Works with both Azure Table Storage and Cosmos DB Table API.\n\n## Installation\n\n```xml\n\u003Cdependency>\n  \u003CgroupId>com.azure\u003C\u002FgroupId>\n  \u003CartifactId>azure-data-tables\u003C\u002FartifactId>\n  \u003Cversion>12.6.0-beta.1\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Client Creation\n\n### With Connection String\n\n```java\nimport com.azure.data.tables.TableServiceClient;\nimport com.azure.data.tables.TableServiceClientBuilder;\nimport com.azure.data.tables.TableClient;\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .connectionString(\"\u003Cyour-connection-string>\")\n    .buildClient();\n```\n\n### With Shared Key\n\n```java\nimport com.azure.core.credential.AzureNamedKeyCredential;\n\nAzureNamedKeyCredential credential = new AzureNamedKeyCredential(\n    \"\u003Caccount-name>\",\n    \"\u003Caccount-key>\");\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"\u003Cyour-table-account-url>\")\n    .credential(credential)\n    .buildClient();\n```\n\n### With SAS Token\n\n```java\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"\u003Cyour-table-account-url>\")\n    .sasToken(\"\u003Csas-token>\")\n    .buildClient();\n```\n\n### With DefaultAzureCredential (Storage only)\n\n```java\nimport com.azure.core.credential.TokenCredential;\nimport com.azure.identity.AzureIdentityEnvVars;\nimport com.azure.identity.DefaultAzureCredentialBuilder;\nimport com.azure.identity.ManagedIdentityCredentialBuilder;\n\n\u002F\u002F Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=\u003Cspecific_credential>\nTokenCredential credential = new DefaultAzureCredentialBuilder()\n    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)\n    .build();\n\u002F\u002F Or use a specific credential directly in production:\n\u002F\u002F See https:\u002F\u002Flearn.microsoft.com\u002Fjava\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme?view=azure-java-stable#credential-classes\n\u002F\u002F TokenCredential credential = new ManagedIdentityCredentialBuilder().build();\n\nTableServiceClient serviceClient = new TableServiceClientBuilder()\n    .endpoint(\"\u003Cyour-table-account-url>\")\n    .credential(credential)\n    .buildClient();\n```\n\n## Key Concepts\n\n- **TableServiceClient**: Manage tables (create, list, delete)\n- **TableClient**: Manage entities within a table (CRUD)\n- **Partition Key**: Groups entities for efficient queries\n- **Row Key**: Unique identifier within a partition\n- **Entity**: A row with up to 252 properties (1MB Storage, 2MB Cosmos)\n\n## Core Patterns\n\n### Create Table\n\n```java\n\u002F\u002F Create table (throws if exists)\nTableClient tableClient = serviceClient.createTable(\"mytable\");\n\n\u002F\u002F Create if not exists (no exception)\nTableClient tableClient = serviceClient.createTableIfNotExists(\"mytable\");\n```\n\n### Get Table Client\n\n```java\n\u002F\u002F From service client\nTableClient tableClient = serviceClient.getTableClient(\"mytable\");\n\n\u002F\u002F Direct construction\nTableClient tableClient = new TableClientBuilder()\n    .connectionString(\"\u003Cconnection-string>\")\n    .tableName(\"mytable\")\n    .buildClient();\n```\n\n### Create Entity\n\n```java\nimport com.azure.data.tables.models.TableEntity;\n\nTableEntity entity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Name\", \"Product A\")\n    .addProperty(\"Price\", 29.99)\n    .addProperty(\"Quantity\", 100)\n    .addProperty(\"IsAvailable\", true);\n\ntableClient.createEntity(entity);\n```\n\n### Get Entity\n\n```java\nTableEntity entity = tableClient.getEntity(\"partitionKey\", \"rowKey\");\n\nString name = (String) entity.getProperty(\"Name\");\nDouble price = (Double) entity.getProperty(\"Price\");\nSystem.out.printf(\"Product: %s, Price: %.2f%n\", name, price);\n```\n\n### Update Entity\n\n```java\nimport com.azure.data.tables.models.TableEntityUpdateMode;\n\n\u002F\u002F Merge (update only specified properties)\nTableEntity updateEntity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Price\", 24.99);\ntableClient.updateEntity(updateEntity, TableEntityUpdateMode.MERGE);\n\n\u002F\u002F Replace (replace entire entity)\nTableEntity replaceEntity = new TableEntity(\"partitionKey\", \"rowKey\")\n    .addProperty(\"Name\", \"Product A Updated\")\n    .addProperty(\"Price\", 24.99)\n    .addProperty(\"Quantity\", 150);\ntableClient.updateEntity(replaceEntity, TableEntityUpdateMode.REPLACE);\n```\n\n### Upsert Entity\n\n```java\n\u002F\u002F Insert or update (merge mode)\ntableClient.upsertEntity(entity, TableEntityUpdateMode.MERGE);\n\n\u002F\u002F Insert or replace\ntableClient.upsertEntity(entity, TableEntityUpdateMode.REPLACE);\n```\n\n### Delete Entity\n\n```java\ntableClient.deleteEntity(\"partitionKey\", \"rowKey\");\n```\n\n### List Entities\n\n```java\nimport com.azure.data.tables.models.ListEntitiesOptions;\n\n\u002F\u002F List all entities\nfor (TableEntity entity : tableClient.listEntities()) {\n    System.out.printf(\"%s - %s%n\",\n        entity.getPartitionKey(),\n        entity.getRowKey());\n}\n\n\u002F\u002F With filtering and selection\nListEntitiesOptions options = new ListEntitiesOptions()\n    .setFilter(\"PartitionKey eq 'sales'\")\n    .setSelect(\"Name\", \"Price\");\n\nfor (TableEntity entity : tableClient.listEntities(options, null, null)) {\n    System.out.printf(\"%s: %.2f%n\",\n        entity.getProperty(\"Name\"),\n        entity.getProperty(\"Price\"));\n}\n```\n\n### Query with OData Filter\n\n```java\n\u002F\u002F Filter by partition key\nListEntitiesOptions options = new ListEntitiesOptions()\n    .setFilter(\"PartitionKey eq 'electronics'\");\n\n\u002F\u002F Filter with multiple conditions\noptions.setFilter(\"PartitionKey eq 'electronics' and Price gt 100\");\n\n\u002F\u002F Filter with comparison operators\noptions.setFilter(\"Quantity ge 10 and Quantity le 100\");\n\n\u002F\u002F Top N results\noptions.setTop(10);\n\nfor (TableEntity entity : tableClient.listEntities(options, null, null)) {\n    System.out.println(entity.getRowKey());\n}\n```\n\n### Batch Operations (Transactions)\n\n```java\nimport com.azure.data.tables.models.TableTransactionAction;\nimport com.azure.data.tables.models.TableTransactionActionType;\nimport java.util.Arrays;\n\n\u002F\u002F All entities must have same partition key\nList\u003CTableTransactionAction> actions = Arrays.asList(\n    new TableTransactionAction(\n        TableTransactionActionType.CREATE,\n        new TableEntity(\"batch\", \"row1\").addProperty(\"Name\", \"Item 1\")),\n    new TableTransactionAction(\n        TableTransactionActionType.CREATE,\n        new TableEntity(\"batch\", \"row2\").addProperty(\"Name\", \"Item 2\")),\n    new TableTransactionAction(\n        TableTransactionActionType.UPSERT_MERGE,\n        new TableEntity(\"batch\", \"row3\").addProperty(\"Name\", \"Item 3\"))\n);\n\ntableClient.submitTransaction(actions);\n```\n\n### List Tables\n\n```java\nimport com.azure.data.tables.models.TableItem;\nimport com.azure.data.tables.models.ListTablesOptions;\n\n\u002F\u002F List all tables\nfor (TableItem table : serviceClient.listTables()) {\n    System.out.println(table.getName());\n}\n\n\u002F\u002F Filter tables\nListTablesOptions options = new ListTablesOptions()\n    .setFilter(\"TableName eq 'mytable'\");\n\nfor (TableItem table : serviceClient.listTables(options, null, null)) {\n    System.out.println(table.getName());\n}\n```\n\n### Delete Table\n\n```java\nserviceClient.deleteTable(\"mytable\");\n```\n\n## Typed Entities\n\n```java\npublic class Product implements TableEntity {\n    private String partitionKey;\n    private String rowKey;\n    private OffsetDateTime timestamp;\n    private String eTag;\n    private String name;\n    private double price;\n    \n    \u002F\u002F Getters and setters for all fields\n    @Override\n    public String getPartitionKey() { return partitionKey; }\n    @Override\n    public void setPartitionKey(String partitionKey) { this.partitionKey = partitionKey; }\n    @Override\n    public String getRowKey() { return rowKey; }\n    @Override\n    public void setRowKey(String rowKey) { this.rowKey = rowKey; }\n    \u002F\u002F ... other getters\u002Fsetters\n    \n    public String getName() { return name; }\n    public void setName(String name) { this.name = name; }\n    public double getPrice() { return price; }\n    public void setPrice(double price) { this.price = price; }\n}\n\n\u002F\u002F Usage\nProduct product = new Product();\nproduct.setPartitionKey(\"electronics\");\nproduct.setRowKey(\"laptop-001\");\nproduct.setName(\"Laptop\");\nproduct.setPrice(999.99);\n\ntableClient.createEntity(product);\n```\n\n## Error Handling\n\n```java\nimport com.azure.data.tables.models.TableServiceException;\n\ntry {\n    tableClient.createEntity(entity);\n} catch (TableServiceException e) {\n    System.out.println(\"Status: \" + e.getResponse().getStatusCode());\n    System.out.println(\"Error: \" + e.getMessage());\n    \u002F\u002F 409 = Conflict (entity exists)\n    \u002F\u002F 404 = Not Found\n}\n```\n\n## Environment Variables\n\n```bash\n# Storage Account\nAZURE_TABLES_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...  # Alternative to Entra ID auth\nAZURE_TABLES_ENDPOINT=https:\u002F\u002F\u003Caccount>.table.core.windows.net  # Required for all auth methods\nAZURE_TOKEN_CREDENTIALS=prod  # Required only if DefaultAzureCredential is used in production\n\n# Cosmos DB Table API\nCOSMOS_TABLE_ENDPOINT=https:\u002F\u002F\u003Caccount>.table.cosmosdb.azure.com  # Alternative endpoint for Cosmos DB Table API\n```\n\n## Best Practices\n\n1. **Partition Key Design**: Choose keys that distribute load evenly\n2. **Batch Operations**: Use transactions for atomic multi-entity updates\n3. **Query Optimization**: Always filter by PartitionKey when possible\n4. **Select Projection**: Only select needed properties for performance\n5. **Entity Size**: Keep entities under 1MB (Storage) or 2MB (Cosmos)\n\n## Trigger Phrases\n\n- \"Azure Tables Java\"\n- \"table storage SDK\"\n- \"Cosmos DB Table API\"\n- \"NoSQL key-value storage\"\n- \"partition key row key\"\n- \"table entity CRUD\"\n",{"name":5,"license":15,"metadata":50,"description":7},{"author":12,"package":51,"version":52},"com.azure:azure-data-tables","1.0.0","main","3f5b461b2314e01c400564051e92469114c5b68f",".github\u002Fplugins\u002Fazure-sdk-java\u002Fskills\u002Fazure-data-tables-java",365,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","https:\u002F\u002Fmicrosoft.github.io\u002Fskills\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-12 02:02:58",{"source":8,"skillName":5,"commands":64,"prompt":74,"zipAvailable":75},[65,68,71],{"tool":66,"command":67},"npx","npx skills add microsoft\u002Fskills --skill azure-data-tables-java",{"tool":69,"command":70},"bunx","bunx skills add microsoft\u002Fskills --skill azure-data-tables-java",{"tool":72,"command":73},"pnpm","pnpm dlx skills add microsoft\u002Fskills --skill azure-data-tables-java","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fplugins\u002Fazure-sdk-java\u002Fskills\u002Fazure-data-tables-java\u002FSKILL.md",true,[77],{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fexamples.md","REFERENCE","参考文档",14702,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fplugins\u002Fazure-sdk-java\u002Fskills\u002Fazure-data-tables-java\u002Freferences\u002Fexamples.md",[84,110,147,174,194,228],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":95,"publishedAt":45},"01M69B4JCRQV5SPXAFCKXQRV0H","skill-creator","Guide for creating effective skills for AI coding agents working with Azure SDKs and Microsoft Foundry services. Use when creating new skills or updating existing skills.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fskill-creator\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[96,97,98,9,99,100,101,24,102,103,104,38,105,106,107,32,108,30,109],"skill creator","creator","coding agents","foundry","microsoft foundry","ai coding agents","services","coding","guide","ai coding","with","sdks","Existing","new",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":126,"publishedAt":45},"01M69B4FD57V1MYKRWAJJECTZ7","podcast-generation","Generate AI-powered podcast-style audio narratives using Azure OpenAI's GPT Realtime Mini model via WebSocket. Use when building text-to-speech features, audio narrative generation, podcast creation from content, or integrating with Azure OpenAI Realtime API for real audio output. Covers full-stack implementation from React frontend to Python FastAPI backend with WebSocket streaming.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fpodcast-generation\u002FSKILL.md",[116,119,122,125],{"categoryNo":117,"categoryName":118,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":120,"categoryName":121,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":123,"categoryName":124,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},[127,128,129,130,131,132,133,24,134,135,136,40,137,138,139,140,141,142,143,144,145,30,146],"podcast generation","podcast","generation","frontend","python","react","realtime","azure openai","generate","streaming","Audio","stack","text","model","fastapi","creation","python fastapi","narrative","features","fastapi backend",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":154,"publishedAt":45},"01M69B4CYPM5SESY5ZWEFDXEQZ","microsoft-docs","Understand Microsoft technologies by querying official documentation. Use whenever the user asks how something works, wants tutorials, needs configuration options, limits, quotas, or best practices for any Microsoft technology (Azure, .NET, M365, Windows, Power Platform, etc.)—even if they don't mention \"docs.\" If the question is about understanding a concept rather than writing code, this is the right skill.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmicrosoft-docs\u002FSKILL.md",[153],{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},[155,9,156,157,158,159,160,161,162,163,164,24,165,166,167,38,168,66,169,170,171,172,173,32],"docs","microsoft docs","MCP","writing","cli","mcp server","windows","power platform","official","documentation","learn","best practices","question","power","back","technology","platform","learn mcp","concept",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":181,"publishedAt":45},"01M69B49C3YPD1ZJ3NC0HPCY58","mcp-builder","Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP), Node\u002FTypeScript (MCP SDK), or C#\u002F.NET (Microsoft MCP SDK).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmcp-builder\u002FSKILL.md",[180],{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},[157,182,183,184,131,185,44,186,9,187,188,140,189,190,104,38,191,192,193,106,32,30],"mcp builder","builder","typescript","llms","model context protocol","fastmcp","Tools","node","context","integrate","mcp sdk","building mcp servers",{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":208,"publishedAt":45},"01M69B467A7CDMFQ0T6Q0ZA12Q","kql","KQL language expertise for writing correct, efficient Kusto Query Language queries. Covers syntax gotchas, join patterns, dynamic types, datetime pitfalls, regex patterns, serialization, memory management, result-size discipline, and advanced functions (geo, vector, graph). USE THIS SKILL whenever writing, debugging, or reviewing KQL queries — even simple ones — because the gotchas section prevents the most common errors that waste tool calls and cause expensive retry cascades. Trigger on: KQL, Kusto, ADX, Azure Data Explorer, Fabric Real-Time Intelligence, EventHouse, Log Analytics, log analysis, data exploration, time series, anomaly detection, summarize, where clause, join, extend, project, let statement, parse operator, extract function, any mention of pipe-forward query syntax.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fkql\u002FSKILL.md",[200,203,204,205],{"categoryNo":201,"categoryName":202,"taxonomyType":93,"taxonomyTypeDesc":94},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":91,"categoryName":92,"taxonomyType":93,"taxonomyTypeDesc":94},{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":206,"categoryName":207,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",[196,158,209,210,211,24,212,213,214,215,216,217,218,219,220,221,222,223,224,32,225,226,227],"summarize","memory","analytics","vector","time series","tool","discipline","log","geo","exploration","pipe","time","project","regex","join","datetime","section","anomaly","parse",{"skillNo":229,"name":230,"nameZh":6,"description":231,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":232,"categories":233,"keywords":234,"publishedAt":45},"01M69B44HJQ7897EZ7NE7DWQX3","github-issue-creator","Convert raw notes, error logs, voice dictation, or screenshots into crisp GitHub-flavored markdown issue reports. Use when the user pastes bug info, error messages, or informal descriptions and wants a structured GitHub issue. Supports images\u002FGIFs for visual evidence.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fgithub-issue-creator\u002FSKILL.md",[],[235,236,237,238,97,239,240,241,242,243,244,245,38,246,247,248,249,250,251,32,30],"github","github issue creator","github issue","issue","issue creator","screenshots","notes","logs","error messages","messages","convert","evidence","reports","images","info","visual","error"]