在BigQuery中,选择星型模式还是非规范化模式取决于数据的特点和查询需求。下面是一些解决方法和代码示例:
星型模式:
示例代码:
创建维度表:
CREATE TABLE dimension_product (
product_id INT64,
product_name STRING,
category STRING,
PRIMARY KEY (product_id)
);
CREATE TABLE dimension_time (
time_id INT64,
date DATE,
month INT64,
year INT64,
PRIMARY KEY (time_id)
);
创建事实表:
CREATE TABLE fact_sales (
product_id INT64,
time_id INT64,
quantity INT64,
amount FLOAT64
);
查询示例:
SELECT dp.product_name, dt.year, SUM(fs.quantity) AS total_quantity
FROM fact_sales fs
JOIN dimension_product dp ON fs.product_id = dp.product_id
JOIN dimension_time dt ON fs.time_id = dt.time_id
GROUP BY dp.product_name, dt.year;
非规范化模式:
示例代码:
创建非规范化表:
CREATE TABLE denormalized_sales (
product_id INT64,
product_name STRING,
category STRING,
time_id INT64,
date DATE,
month INT64,
year INT64,
quantity INT64,
amount FLOAT64
);
查询示例:
SELECT product_name, year, SUM(quantity) AS total_quantity
FROM denormalized_sales
GROUP BY product_name, year;
无论选择星型模式还是非规范化模式,都需要根据具体数据和查询需求进行权衡和优化。