Vitess: инициализировать схему пространства ключей с помощью файла SQL - PullRequest
0 голосов
/ 22 февраля 2019

Я использую helm и файл 101_initial_cluster.yaml из примера Vitess для настройки моего начального кластера.Пример имеет инициализацию схемы с использованием строки SQL, как показано ниже:

schema:
        initial: |-
          create table product(
            sku varbinary(128),
            description varbinary(128),
            price bigint,
            primary key(sku)
          );
          create table customer(
            customer_id bigint not null auto_increment,
            email varbinary(128),
            primary key(customer_id)
          );
          create table corder(
            order_id bigint not null auto_increment,
            customer_id bigint,
            sku varbinary(128),
            price bigint,
            primary key(order_id)
          );

Я хотел бы заменить это файлом initial: my_initial_keyspace_schema.sql.Из документации Vitess я вижу, что Vitess разрешает это, используя ApplySchema -sql_file=user_table.sql user, но я хотел бы инициализировать с помощью файла helm.

Это было бы очень полезно, так как очень утомительно организовывать и вставлять схемукак string.Таблицы, которые зависят от других, должны быть вставлены сначала, а остальные следуют.Забывание заставляет Витесс выдать ошибку.

1 Ответ

0 голосов
/ 27 февраля 2019

Добро пожаловать в StackOverflow.

Боюсь, что нет встроенной функции, позволяющей инициализировать DbSchema непосредственно из файла SQL в текущем состоянии диаграммы Vitess Helm.Вы можете определить любой из его настраиваемых параметров с помощью команды helm inspect <chart_name>.

Однако вы можете попробовать настроить его в соответствии со своими потребностями следующими способами:

  1. Оставайтесь с ApplySchema{-sql =} mode

    , но пусть схема SQL отбрасывается из статического файла как часть шаблона диаграммы Helm
    (например, из static / initial_schema.sql location):

    Так что просто добавьте фрагмент кода управления, как этот:

{{ if .Values.initialSchemaSqlFile.enabled }}
        {{- $files := .Files }}
        {{- range tuple "static/initial_schema.sql" }}
        {{ $schema := $files.Get . }}
{{- end }}
{{ else }}
   # Default inline schema from Values.topology.cells.keyspaces[0].schema
{{ end }}

Узнайте больше об использовании встроенных объектов Helm, таких как File здесь

Использовать режим ApplySchema {-sql-file =}

Адаптировать фрагмент кода здесь , где создается команда vtctlclient.
Это также потребует введения нового KubernetesОбъект тома ( nfs или Git на основе репо являются хорошими вариантами здесь), который вы можете смонтировать на задании, по определенному пути, откуда файл initial_schema.sql будетбыть использованы.
...