# Mysql to BigQuery Replication
- Google said views are creating issues
- Is it possible to avoid JSON table in the views ?
- Because of views, binlog is getting modified, and it creates problem in replication.
- There are binlog entries added because of views, and that is creating problem.
- Can we avoid views? Can we keep views in separate db? need to investigate.
- Next action items for google
- google Q1: add flag, shamanth already added it. Do we have to reply to them?
- Other options
- Udaya: Create write replicate and calculate values for views. (will it be realtime?)
- Palani: In the sync adapter itself write to both databases (mysql & bigQuery).
- Problem: Insert queries are too complicated.
- Solution: If we simplify the queries we can get it work.
- Solution: Define schema, write a library to generate queries (ORM style query generator).
- Mysql Upsert / BigQuery Insert
- Two clients waiting
- ?
- ?
- Main problem is
- Profile - Profile service taking time
- Can we cache data?
- Emails are getting delayed
- Profile service
- got introduced for ESP 2.0
- Get data from all places (behavioural data, CRM data, synced data)
- Do Identity resolution and return collected data
- Lot of time to retrive data
- Workflows
- Run asynchronously whenever event happens
- So we have to lookup queries (workflow will give some id to profile service).
- Since we query by Id, it should data immediately. why it is not happening now?
- Example: http://beta-cluster.convertcart.com:30261/74707836/profile-proxy/profile/deviceId/208938804.7502397625?requiredField=crm
- API call is called with deviceId
- You have to find out emails collected in this device
- With device Id, find out all other ids (primarily email Id)
- Sample Query: SELECT `domain_id`, `order_id`, `email`, `phone`, `items`, `currency`, `customer_id`, `created_at`, `order_total` FROM `order_magento1` WHERE domain_id = '74707836' AND (email = "rajalakshmi+browsed03010336@convertcart.com")
```
+----+--------------------+--------------------+------------+--------+---------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------+-------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+--------------------+--------------------+------------+--------+---------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------+-------+----------+-------------+
| 1 | PRIMARY | <derived3> | NULL | ALL | NULL | NULL | NULL | NULL | 5928 | 1.00 | Using where |
| 3 | DERIVED | magento1_orders | NULL | range | PRIMARY,data_source_magento1_order,order_id | PRIMARY | 66 | NULL | 23711 | 25.00 | Using where |
| 4 | DEPENDENT SUBQUERY | magento1_customers | NULL | eq_ref | PRIMARY,data_source_magento1_customer,customer_id | PRIMARY | 200 | data_warehouse.magento1_orders.domain_id,data_warehouse.magento1_orders.data_sources_id,data_warehouse.magento1_orders.customer_id | 1 | 100.00 | Using where |
+----+--------------------+--------------------+------------+--------+---------------------------------------------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------+-------+----------+-------------+
```
```sql
WITH
`order_magento1` AS(
SELECT
`data_warehouse`.`magento1_orders`.`domain_id` AS `domain_id`,
`data_warehouse`.`magento1_orders`.`data_sources_id` AS `data_sources_id`,
`data_warehouse`.`magento1_orders`.`order_id` AS `order_id`,
`data_warehouse`.`magento1_orders`.`increment_id` AS `id`,
`data_warehouse`.`magento1_orders`.`status` AS `status`,
`data_warehouse`.`magento1_orders`.`status` AS `custom_status`,
`data_warehouse`.`magento1_orders`.`grand_total` AS `order_total`,
STR_TO_DATE(
`data_warehouse`.`magento1_orders`.`created_at`,
'%Y-%m-%d%T'
) AS `created_at`,
STR_TO_DATE(
`data_warehouse`.`magento1_orders`.`updated_at`,
'%Y-%m-%d%T'
) AS `updated_at`,
`data_warehouse`.`magento1_orders`.`billing_address` AS `billing_address`,
`data_warehouse`.`magento1_orders`.`shipping_address` AS `shipping_address`,
`data_warehouse`.`magento1_orders`.`customer_firstname` AS `first_name`,
`data_warehouse`.`magento1_orders`.`customer_lastname` AS `last_name`,
`data_warehouse`.`magento1_orders`.`customer_id` AS `customer_id`,
`data_warehouse`.`magento1_orders`.`customer_email` AS `email`,
(
SELECT
`data_warehouse`.`magento1_customers`.`telephone`
FROM
`data_warehouse`.`magento1_customers`
WHERE
(
(
`data_warehouse`.`magento1_customers`.`customer_id` = `data_warehouse`.`magento1_orders`.`customer_id`
) AND(
`data_warehouse`.`magento1_orders`.`domain_id` = `data_warehouse`.`magento1_customers`.`domain_id`
) AND(
`data_warehouse`.`magento1_orders`.`data_sources_id` = `data_warehouse`.`magento1_customers`.`data_sources_id`
)
)
) AS `phone`,
TRIM(
BOTH '"'
FROM
JSON_EXTRACT(
`data_warehouse`.`magento1_orders`.`payment`,
'$.method'
)
) AS `payment_method`,
`data_warehouse`.`magento1_orders`.`global_currency_code` AS `currency`,
`data_warehouse`.`magento1_orders`.`subtotal` AS `sub_total`,
`data_warehouse`.`magento1_orders`.`tax_amount` AS `total_tax`,
IF(
(
`data_warehouse`.`magento1_orders`.`coupon_code` IS NOT NULL
),
TRUE,
FALSE
) AS `is_coupon_applied`,
CAST(
`data_warehouse`.`magento1_orders`.`shipping_amount` AS DECIMAL(10, 2)
) AS `shipping_cost`,
REPLACE
(
`data_warehouse`.`magento1_orders`.`items`,
'"qty_ordered":',
'"quantity":'
) AS `items`,
`data_warehouse`.`magento1_orders`.`state` AS `payment_status`
FROM
`data_warehouse`.`magento1_orders`
WHERE
(
(
`data_warehouse`.`magento1_orders`.`domain_id` <> ''
) AND(
`data_warehouse`.`magento1_orders`.`order_id` <> ''
) AND(
`data_warehouse`.`magento1_orders`.`data_sources_id` <> ''
)
)
)
SELECT
`order_magento1`.`domain_id` AS `domain_id`,
`order_magento1`.`data_sources_id` AS `data_sources_id`,
`order_magento1`.`order_id` AS `order_id`,
`order_magento1`.`id` AS `id`,
`order_magento1`.`status` AS `status`,
`order_magento1`.`custom_status` AS `custom_status`,
`order_magento1`.`order_total` AS `order_total`,
`order_magento1`.`created_at` AS `created_at`,
`order_magento1`.`updated_at` AS `updated_at`,
`order_magento1`.`billing_address` AS `billing_address`,
`order_magento1`.`shipping_address` AS `shipping_address`,
`order_magento1`.`first_name` AS `first_name`,
`order_magento1`.`last_name` AS `last_name`,
`order_magento1`.`customer_id` AS `customer_id`,
`order_magento1`.`email` AS `email`,
`order_magento1`.`phone` AS `phone`,
`order_magento1`.`payment_method` AS `payment_method`,
`order_magento1`.`currency` AS `currency`,
`order_magento1`.`sub_total` AS `sub_total`,
`order_magento1`.`total_tax` AS `total_tax`,
`order_magento1`.`is_coupon_applied` AS `is_coupon_applied`,
`order_magento1`.`shipping_cost` AS `shipping_cost`,
`order_magento1`.`items` AS `items`,
`order_magento1`.`payment_status` AS `payment_status`
FROM
`order_magento1`
```