The shop, raw and analytics datasets are read-only for you. Build your own tables in the practice dataset.
CREATE TABLE practice.name AS SELECT ... makes a table from a query. CREATE OR REPLACE TABLE rebuilds one that exists. With a column list you name the types yourself: INT64, STRING, NUMERIC, DATE, TIMESTAMP, BOOL, and ARRAY<...> and STRUCT<...> for nested columns.
Big tables should usually be partitioned and clustered when you create them:
CREATE TABLE practice.orders_2025
PARTITION BY order_date
CLUSTER BY customer_id
AS SELECT * FROM shop.orders;
OPTIONS(description = '...', require_partition_filter = TRUE) adds settings. The last one makes BigQuery reject queries that don't filter on the partition column, a guard against accidental full scans. A view, CREATE VIEW practice.name AS SELECT ..., saves the query instead of the rows.