Merge pull request #694 from thekad/feature/nested_bigquery_schema

Feature/nested bigquery schema
This commit is contained in:
Chris Hawk 2025-07-29 15:17:43 -07:00 committed by GitHub
commit 79504d54d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 109 additions and 8 deletions

View file

@ -56,17 +56,17 @@ options:
dataset_id: dataset_id:
description: description:
- The ID of the dataset containing this table. - The ID of the dataset containing this table.
required: false required: true
type: str type: str
project_id: project_id:
description: description:
- The ID of the project containing this table. - The ID of the project containing this table.
required: false required: true
type: str type: str
table_id: table_id:
description: description:
- The ID of the the table. - The ID of the the table.
required: false required: true
type: str type: str
clustering: clustering:
description: description:
@ -181,7 +181,7 @@ options:
fields: fields:
description: description:
- Describes the nested schema fields if the type property is set to RECORD. - Describes the nested schema fields if the type property is set to RECORD.
elements: str elements: raw
required: false required: false
type: list type: list
mode: mode:
@ -296,7 +296,7 @@ options:
description: description:
- Describes the nested schema fields if the type property is set to - Describes the nested schema fields if the type property is set to
RECORD . RECORD .
elements: str elements: raw
required: false required: false
type: list type: list
mode: mode:
@ -1016,7 +1016,11 @@ def main():
module = GcpModule( module = GcpModule(
argument_spec=dict( argument_spec=dict(
state=dict(default='present', choices=['present', 'absent'], type='str'), state=dict(default='present', choices=['present', 'absent'], type='str'),
table_reference=dict(type='dict', options=dict(dataset_id=dict(type='str'), project_id=dict(type='str'), table_id=dict(type='str'))), table_reference=dict(type='dict', options=dict(
dataset_id=dict(type='str', required=True),
project_id=dict(type='str', required=True),
table_id=dict(type='str', required=True)
)),
clustering=dict(type='list', elements='str'), clustering=dict(type='list', elements='str'),
description=dict(type='str'), description=dict(type='str'),
friendly_name=dict(type='str'), friendly_name=dict(type='str'),
@ -1041,7 +1045,7 @@ def main():
elements='dict', elements='dict',
options=dict( options=dict(
description=dict(type='str'), description=dict(type='str'),
fields=dict(type='list', elements='str'), fields=dict(type='list', elements='raw'),
mode=dict(type='str'), mode=dict(type='str'),
name=dict(type='str'), name=dict(type='str'),
type=dict(type='str'), type=dict(type='str'),
@ -1068,7 +1072,7 @@ def main():
elements='dict', elements='dict',
options=dict( options=dict(
description=dict(type='str'), description=dict(type='str'),
fields=dict(type='list', elements='str'), fields=dict(type='list', elements='raw'),
mode=dict(type='str'), mode=dict(type='str'),
name=dict(type='str'), name=dict(type='str'),
type=dict(type='str'), type=dict(type='str'),

View file

@ -1,3 +1,8 @@
--- ---
- name: Generated tests - name: Generated tests
ansible.builtin.include_tasks: autogen.yml ansible.builtin.include_tasks: autogen.yml
- name: Run nested test cases
ansible.builtin.include_tasks: nested.yml
vars:
dataset_name: "{{ resource_name | replace('-', '_') }}_nested"

View file

@ -0,0 +1,92 @@
---
- name: Run testcases
block:
- name: create dataset
google.cloud.gcp_bigquery_dataset:
name: "{{ dataset_name }}"
dataset_reference:
dataset_id: "{{ dataset_name }}"
project: "{{ gcp_project }}"
auth_kind: "{{ gcp_cred_kind }}"
service_account_file: "{{ gcp_cred_file }}"
state: present
register: _dataset
- name: Create table with defined fields
google.cloud.gcp_bigquery_table:
name: "{{ resource_name }}-fields"
dataset: "{{ dataset_name }}"
state: present
project: "{{ gcp_project }}"
auth_kind: "{{ gcp_cred_kind }}"
service_account_file: "{{ gcp_cred_file }}"
table_reference:
dataset_id: "{{ dataset_name }}"
project_id: "{{ gcp_project }}"
table_id: "{{ resource_name }}-fields"
schema:
fields:
- name: id
description: An Integer field
type: INTEGER
- name: name
description: A String field
type: STRING
- name: Create table with nested fields
google.cloud.gcp_bigquery_table:
name: "{{ resource_name }}-nested"
dataset: "{{ dataset_name }}"
state: present
project: "{{ gcp_project }}"
auth_kind: "{{ gcp_cred_kind }}"
service_account_file: "{{ gcp_cred_file }}"
table_reference:
dataset_id: "{{ dataset_name }}"
project_id: "{{ gcp_project }}"
table_id: "{{ resource_name }}-nested"
schema:
fields:
- name: id
description: An Integer field
type: INTEGER
- name: def
description: A Record field
type: RECORD
fields:
- name: id
description: A nested Integer field
type: INTEGER
- name: subdef
description: A nested Record field
type: RECORD
fields:
- name: id
description: A nested-nested Integer field
type: INTEGER
- name: desc
description: A nested-nested String field
type: STRING
always:
- name: Remove tables
google.cloud.gcp_bigquery_table:
name: "{{ resource_name }}-{{ item }}"
dataset: "{{ dataset_name }}"
project: "{{ gcp_project }}"
auth_kind: "{{ gcp_cred_kind }}"
service_account_file: "{{ gcp_cred_file }}"
state: absent
loop:
- fields
- nested
- name: Remove dataset
google.cloud.gcp_bigquery_dataset:
name: "{{ dataset_name }}"
dataset_reference:
dataset_id: "{{ dataset_name }}"
project: "{{ gcp_project }}"
auth_kind: "{{ gcp_cred_kind }}"
service_account_file: "{{ gcp_cred_file }}"
state: absent