CREATE TABLE test_data AS
/*SA_BEGIN(test_project)*/ SELECT id, first_id, $city AS city FROM users LIMIT 10 /*SA_END*/
使用这种方式,也可以很容易的实现把神策的数据和其它外部数据表进行 JOIN。
4. 数据导出
如果想把神策的数据导出成文本格式,用于备份或者其它用途,那可以使用以下方案:
创建一个文本格式的数据表,把待导出的数据插入此表。
CREATE TABLE default.export_data AS
/*SA_BEGIN(production)*/
SELECT user_id,time,event, $os AS _os FROM events WHERE date=CURRENT_DATE() LIMIT 10
/*SA_END*/
注意: 普通 Impala/Hive 表不支持带 $ 的字段,因此如果导出这类字段需要使用 AS 重命名。
这里以 Python API 为例,使用 Spark 的 JDBC Connector 直接访问神策的原始数据:
from pyspark.sql import SparkSession
jdbc_url= "jdbc:impala://localhost:21050/rawdata;UseNativeQuery=1"
spark = SparkSession.builder.appName("sa-test").getOrCreate()
df = spark.read.jdbc(url=jdbc_url, table="(/*SA(default)*/ SELECT date, event, count(*) AS c FROM events WHERE date=CURRENT_DATE() GROUP BY 1,2) a")
df.select(df['date'], df['event'], df['c'] * 10000).show()
var test_jdbc = spark.sqlContext.read.format("jdbc").option("url", "jdbc:impala://localhost:21050/rawdata;UseNativeQuery=1").option("driver", "com.cloudera.impala.jdbc41.Driver").option("dbtable", "(/*SA(default)*/ SELECT date, event, count(*) AS c FROM events WHERE date=CURRENT_DATE() GROUP BY 1,2) a").load();
test_jdbc.show