Skip to content

Unable compare value from records array #233

Closed
@elsiniestra

Description

@elsiniestra

I need to create a join of 2 BQ tables where one of them has an id field that has to be compared with the record id in the repeated field (array of records) of another one. I'm struggling with SQLAlchemy implementation of the SQL query that works fine. Tried to solve this problem in different ways, but nothing was successful, most relevant and similar to sql-like solution below. Probably, there are some troubles with sqlalchemy interpretation of SQL queries or result fetch either, aren't?

Environment details

  • OS type and version: MacOS, 12.0 beta
  • Python version: 3.9.1
  • pip version: 21.1.2
  • google-cloud-bigquery version: 2.22.1

Steps to reproduce

  1. Create the BQ table Mock with fields:

    • name: mock_id | type: STRING | mode: NULLABLE
  2. Create the BQ table AnotherMock with fields:

    • name: objects | type: RECORD | mode: REPEATED
      • name: object_id | type: STRING | mode: NULLABLE
  3. Run code below (It gonna fail).

  4. Run SQL below (it gonna success).

SQL example

SELECT *
FROM db.dataset.mock mock
INNER JOIN (SELECT another_mock_objects FROM db.dataset.another_mock, UNNEST(objects) as another_mock_objects) another_mock
ON mock.mock_id = another_mock.another_mock_objects.object_id

Code example

 subquery = session.query(
    func.unnest(another_mock_model.c.objects).label('another_mock_objects')
).subquery()

session.execute(
    select([]) \
        .select_from(
            mock_model
                .join(
                    another_mock_model,
                    subquery.c.another_mock_objects.object_id == mock_model.c.mock_id,
                )
        )
)

Stack trace

AttributeError: 'Comparator' object has no attribute 'object_id'

Metadata

Metadata

Assignees

Labels

api: bigqueryIssues related to the googleapis/python-bigquery-sqlalchemy API.priority: p1Important issue which blocks shipping the next release. Will be fixed prior to next release.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions