Заполнение данных и выполнение массовых операций с данными,Заполнение данных и выполнение массовых операций с данными

В Firebase Data Connect операции с большими объемами данных выполняются с использованием мутаций. Несмотря на то, что ваши проекты Data Connect хранят данные в PostgreSQL, вы не можете выполнять массовую загрузку данных с помощью операторов SQL или инструментов SQL: ваша служба Data Connect и ее схемы должны синхронизироваться с вашей базой данных, а работа непосредственно в PostgreSQL нарушит эту синхронизацию.

Вот почему Data Connect предоставляет стандартные мутации _insertMany , _upsertMany и _deleteMany для заполнения данных и управления массовыми данными.

Когда вы создаете прототипы приложений и запускаете потоки CI/CD, эти мутации можно вызвать в локальной среде разработки с помощью расширения VS Code, эмулятора Data Connect и (необязательно) экземпляра локальной базы данных.

Начальные данные в локальных и рабочих экземплярах

В руководстве по началу работы вы настраиваете приложение для добавления одной записи в одну таблицу с помощью специальной мутации вставки.

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

В вашей среде прототипирования необходим код для выполнения заполнения данных. В этом руководстве представлены некоторые примеры, иллюстрирующие:

  • Использование _insertMany и _upsertMany в отдельных таблицах
  • Использование _insertMany в связанных таблицах

Обновите схему приложения для обзора фильмов.

Вы можете использовать мутации _insertMany и _upsertMany для обновления отдельных таблиц базы данных по одной или обновления нескольких таблиц, связанных отношениями соединения. Ниже показана расширенная схема приложения для просмотра фильмов, которая помогает проиллюстрировать эти варианты использования и примеры. Он расширяет schema.gql за пределы исходного типа Movie , включив в него типы Actor и MovieActor , что позволяет нам создавать прототипы более сложных запросов.

# Actors
# Suppose an actor can participate in multiple movies and movies can have multiple actors
# Movie - Actors (or vice versa) is a many to many relationship
type Actor @table {
  id: UUID!
  imageUrl: String! 
  name: String! @col(name: "name", dataType: "varchar(30)")
}

# Join table for many-to-many relationship for movies and actors
# The 'key' param signifies the primary key(s) of this table
# In this case, the keys are [movieId, actorId], the generated fields of the reference types [movie, actor]
type MovieActor @table(key: ["movie", "actor"]) {
  # @ref creates a field in the current table (MovieActor) that holds the primary key of the referenced type
  # In this case, @ref(fields: "movieId", references: "id") is implied
  movie: Movie!
  # movieId: UUID! <- this is created by the implied @ref
  actor: Actor!
  # actorId: UUID! <- this is created by the implied @ref
  role: String! # "main" or "supporting"
}

Запишите мутации в начальные данные о нулевом состоянии.

Во время прототипирования, когда ваши запросы и мутации необходимо проверить на соответствие диапазону дискретных значений, вы можете заполнить данные несколькими записями. Например, вы можете добавить несколько записей фильмов с разными типами жанров и рейтингами для тестирования сравнений и фильтрации.

Исходные данные в таблицы Movie и Actor .

В зависимости от стадии прототипирования вы можете использовать тот же метод, который представлен в руководстве «Начало работы», для вставки одной или двух записей: то есть вы можете использовать Code Lenses в расширении VS Code для создания мутаций _insert , данных жесткого кода и Запустите эти мутации в VS Code .

В конце концов, имеет смысл добавлять в таблицу множество записей с помощью операции _insertMany . В примере приложения для обзора фильмов это вставляет исходный набор данных в Movie и Actor .

Чтобы выполнить следующие мутации с помощью расширения VS Code Firebase, в соответствующем представлении редактора файлов нажмите кнопки «Запустить (производственный)» или « Запустить (локальный) CodeLens», в зависимости от того, создаете ли вы прототип с помощью производственной службы или локальной базы данных.

# insertMany for Movie
# 2 records shown
mutation {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])
}
# insertMany for Actor
# 2 records shown
mutation {
  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
   ])
}

Исходные данные в таблицу соединений MovieActor

Чтобы протестировать запросы и мутации с помощью соединений и других сложных операций, вы можете добавить несколько записей в таблицу MovieActor .

Здесь, когда вы обновляете несколько таблиц в таком отношении, вы можете добавить директиву @transaction , чтобы обеспечить правильное завершение обновления.

mutation @transaction {
  movie_insertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
  ])

  actor_insertMany(data: [
    {
      id: "123e4567-e89b-12d3-a456-426614174000",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fdicaprio.jpeg?alt=media&token=452e030a-efa5-4ef4-bb81-502b23241316",
      name: "Leonardo DiCaprio"
    },
    {
      id: "123e4567-e89b-12d3-a456-426614174001",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/actors%2Fkeanu.jpg?alt=media&token=6056520c-ef3e-4823-aad0-108aab163115",
      name: "Keanu Reeves"
    }
  ])
}

Напишите мутацию для сброса исходных данных.

При создании прототипов и выполнении CI/CD может оказаться полезным сброс данных в нулевое состояние для выполнения новой серии тестов на новом наборе данных.

Для этого, если ваш код прототипа не добавляет записи в ваши таблицы, используйте мутацию _upsertMany предоставляемую Data Connect .

В следующем примере вызывается movie_upsertMany с начальными значениями для обновления записей фильма до исходного состояния.

mutation {
  # Execute an upsertMany operation to update the Movie table
  movie_upsertMany(data: [
    {
      id: "550e8400-e29b-41d4-a716-446655440000",
      title: "Inception",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Finception.jpg?alt=media&token=07b09781-b302-4623-a5c3-1956d0143168",
      genre: "sci-fi",
    },
    {
      id: "550e8400-e29b-41d4-a716-446655440001",
      title: "The Matrix",
      imageUrl: "https://firebasestorage.googleapis.com/v0/b/fdc-quickstart-web.appspot.com/o/movies%2Fthe_matrix.jpg?alt=media&token=4975645d-fef8-409e-84a5-bcc1046e2059",
      genre: "action",
    }
   
}

Что дальше?