TMSL Xmla Создание таблиц в существующей базе данных - язык сценариев табличной модели - Azure службы аналитики - PullRequest
1 голос
/ 19 марта 2020

У меня вопрос: какой будет правильный синтаксис для добавления 2 или более таблиц в существующую базу данных с использованием файла xmla и SSMS? У меня есть модель, развернутая на Azure сервере служб аналитики. Таким образом, база данных уже создана. Я хочу создать или заменить таблицы, запустив один единственный скрипт xmla в SSMS.

Когда я использую приведенный ниже скрипт, чтобы создать одну таблицу, он работает отлично. Но мне нужно создать несколько таблиц (не только одну), используя один скрипт xmla.

Сценарий, который работает для одной таблицы

Сценарий, приведенный ниже, работает отлично и правильно "создает или заменяет" одну таблицу в базе данных.

{
  "createOrReplace": {
    "object": {
      "database": "MyDatabase",
      "table": "MyTable"
    },
    "table": {
      "name": "MyTable",
      "columns": [
        {
          "name": "MyTableId",
          "dataType": "int64",
          "sourceColumn": "MyTableId"
        },
        {
          "name": "MyTable",
          "dataType": "string",
          "sourceColumn": "MyTable"
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "dataView": "full",
          "source": {
            "type": "m",
            "expression": [
              "let",
              "    Source=GetFileList(),",
              "    #\"MyTable txt\" = Source{[Name=\"MyTable.txt\"]}[Content],",
              "    #\"Imported CSV\" = Csv.Document(#\"MyTable txt\",[Delimiter=\",\", Columns=9, Encoding=1252, QuoteStyle=QuoteStyle.None]),",
              "    #\"Promoted Headers\" = Table.PromoteHeaders(#\"Imported CSV\", [PromoteAllScalars=true]),",
              "    #\"Changed Type\" = Table.TransformColumnTypes(#\"Promoted Headers\",{{\"MyTableId\", Int64.Type}, {\"MyTable\", type text}, {\"Description\", type text}}),",
              "    #\"Removed Columns\" = Table.RemoveColumns(#\"Changed Type\",{\"Description\"})",
              "in",
              "    #\"Removed Columns\""
            ]
          }
        }
      ]
    }
  }
}

Я попытался с помощью приведенного ниже кода добавить 2 таблицы, но получил ошибку Запрос JSON DDL не выполнен со следующей ошибкой: Нераспознанное свойство JSON: таблицы. Проверьте путь «таблицы», строка 6, позиция 16 ..

{   
  "createOrReplace": {   
    "database": {   
      "name": "MyDatabase",   
      "tables": [   
        {"name": "TableA",
      "columns": [
        {
          "name": "TableAId",
          "dataType": "int64",
          "sourceColumn": "TableAId"
        },
        {
          "name": "TableA",
          "dataType": "string",
          "sourceColumn": "TableA"
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "dataView": "full",
          "source": {
            "type": "m",
            "expression": [
              "let",
              "    Source=GetFileList(),",
              "    #\"TableA txt\" = Source{[Name=\"TableA.txt\"]}[Content],",
              "    #\"Imported CSV\" = Csv.Document(#\"TableA txt\",[Delimiter=\",\", Columns=9, Encoding=1252, QuoteStyle=QuoteStyle.None]),",
              "    #\"Promoted Headers\" = Table.PromoteHeaders(#\"Imported CSV\", [PromoteAllScalars=true]),",
              "    #\"Changed Type\" = Table.TransformColumnTypes(#\"Promoted Headers\",{{\"TableAId\", Int64.Type}, {\"TableA\", type text}, {\"Description\", type text}}),",
              "    #\"Removed Columns\" = Table.RemoveColumns(#\"Changed Type\",{\"Description\"})",
              "in",
              "    #\"Removed Columns\""
            ]
          }
        }
      ] },   
        {"name": "TableB",
      "columns": [
        {
          "name": "TableBId",
          "dataType": "int64",
          "sourceColumn": "TableBId"
        },
        {
          "name": "TableB",
          "dataType": "string",
          "sourceColumn": "TableB"
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "dataView": "full",
          "source": {
            "type": "m",
            "expression": [
              "let",
              "    Source=GetFileList(),",
              "    #\"TableB txt\" = Source{[Name=\"TableB.txt\"]}[Content],",
              "    #\"Imported CSV\" = Csv.Document(#\"TableB txt\",[Delimiter=\",\", Columns=11, Encoding=1252, QuoteStyle=QuoteStyle.None]),",
              "    #\"Promoted Headers\" = Table.PromoteHeaders(#\"Imported CSV\", [PromoteAllScalars=true]),",
              "    #\"Changed Type\" = Table.TransformColumnTypes(#\"Promoted Headers\",{{\"TableBId\", Int64.Type}, {\"TableB\", type text}, {\"Description\", type text}}),",
              "    #\"Removed Columns\" = Table.RemoveColumns(#\"Changed Type\",{\"Description\"})",
              "in",
              "    #\"Removed Columns\""
            ]
          }
        }
      ] } 
      ]      
    }   
  }   
}  

Я также попробовал приведенный ниже код, но получил ошибку Ошибка -1055784777: запрос JSON DDL завершился неудачно с следующая ошибка: нераспознанное свойство JSON: таблицы. Проверьте путь 'createOrReplace.tables', строка 6, позиция 14 .. Сбой запроса JSON DDL со следующей ошибкой: Нераспознанное свойство JSON: таблицы. Проверьте путь 'createOrReplace.tables', строка 6, позиция 14 ..

{
  "createOrReplace": {
    "object": {
      "database": "MyDatabase"
      },
    "tables": [
      {
        "name": "TableA",
        "columns": [
          {
            "name": "TableAId",
            "dataType": "int64",
            "sourceColumn": "TableAId"
          },
          {
            "name": "TableA",
            "dataType": "string",
            "sourceColumn": "TableA"
          }
        ],
        "partitions": [
          {
            "name": "Partition",
            "dataView": "full",
            "source": {
              "type": "m",
              "expression": [
                "let",
                "    Source=GetFileList(),",
                "    #\"TableA txt\" = Source{[Name=\"TableA.txt\"]}[Content],",
                "    #\"Imported CSV\" = Csv.Document(#\"TableA txt\",[Delimiter=\",\", Columns=9, Encoding=1252, QuoteStyle=QuoteStyle.None]),",
                "    #\"Promoted Headers\" = Table.PromoteHeaders(#\"Imported CSV\", [PromoteAllScalars=true]),",
                "    #\"Changed Type\" = Table.TransformColumnTypes(#\"Promoted Headers\",{{\"TableAId\", Int64.Type}, {\"TableA\", type text}, {\"Description\", type text}}),",
                "    #\"Removed Columns\" = Table.RemoveColumns(#\"Changed Type\",{\"Description\"})",
                "in",
                "    #\"Removed Columns\""
              ]
            }
          }
        ]
      },
      {
        "name": "TableB",
        "columns": [
          {
            "name": "TableBId",
            "dataType": "int64",
            "sourceColumn": "TableBId"
          },
          {
            "name": "TableB",
            "dataType": "string",
            "sourceColumn": "TableB"
          }
        ],
        "partitions": [
          {
            "name": "Partition",
            "dataView": "full",
            "source": {
              "type": "m",
              "expression": [
                "let",
                "    Source=GetFileList(),",
                "    #\"TableB txt\" = Source{[Name=\"TableB.txt\"]}[Content],",
                "    #\"Imported CSV\" = Csv.Document(#\"TableB txt\",[Delimiter=\",\", Columns=11, Encoding=1252, QuoteStyle=QuoteStyle.None]),",
                "    #\"Promoted Headers\" = Table.PromoteHeaders(#\"Imported CSV\", [PromoteAllScalars=true]),",
                "    #\"Changed Type\" = Table.TransformColumnTypes(#\"Promoted Headers\",{{\"TableBId\", Int64.Type}, {\"TableB\", type text}, {\"Description\", type text}}),",
                "    #\"Removed Columns\" = Table.RemoveColumns(#\"Changed Type\",{\"Description\"})",
                "in",
                "    #\"Removed Columns\""
              ]
            }
          }
        ]
      }
    ]
  }
}

1 Ответ

1 голос
/ 23 апреля 2020

Используйте команду последовательности:

{
  "sequence": {
    "operations": [
      { CREATE TABLE 1},
      { CREATE TABLE 2}
    ]
  }
}

Вы можете включить столько операций, сколько хотите.

...