in src/zretail_demo/zretail_demo_frontend/src/zcl_product_search_qic.clas.abap [0:0]
METHOD get_product_attr.
DATA: ls_input_bq TYPE /goog/cl_bigquery_v2=>ty_103.
TRY.
ls_input_bq-query = |SELECT * from `{ io_client->gv_project_id }.epm_shop.product_info_sap`|.
IF iv_product_ids IS NOT INITIAL.
ls_input_bq-query = ls_input_bq-query && | WHERE PRODUCT_ID IN ( { iv_product_ids } )|.
ENDIF.
CALL METHOD io_client->query_jobs
EXPORTING
iv_p_projects_id = CONV #( io_client->gv_project_id )
is_input = ls_input_bq
IMPORTING
es_output = DATA(ls_output).
LOOP AT ls_output-rows REFERENCE INTO DATA(ls_rows).
DATA(ls_product_attr) = VALUE t_product_attr( ).
LOOP AT ls_rows->f ASSIGNING FIELD-SYMBOL(<ls_field>).
DATA(lv_tabix_field) = sy-tabix.
ASSIGN COMPONENT lv_tabix_field OF STRUCTURE ls_product_attr
TO FIELD-SYMBOL(<ls_target_field>).
IF <ls_field>-v IS BOUND AND
<ls_target_field> IS ASSIGNED.
<ls_target_field> = <ls_field>-v->*.
ENDIF.
ENDLOOP.
INSERT ls_product_attr INTO TABLE rt_attr.
ENDLOOP.
CATCH /goog/cx_sdk.
ENDTRY.