【发布时间】:2019-11-27 00:06:32
【问题描述】:
我们正在探索在 spark 中使用临时视图并将其与某些实际文件存储或其他临时视图相关联的可能性。我们希望实现以下目标:
- 某些用户将数据上传到某些 S3/hdfs 文件存储。
- 定义了一个(临时)视图,以便可以针对数据运行 spark sql 查询。
- 创建了一些其他临时视图(引用其他一些数据)。
- 创建了第三个临时视图,用于连接来自 (2) 和 (3) 的数据。
通过从 (4) 中的视图中进行选择,用户可以得到一个表,该表反映了 (2) 和 (3) 中的连接数据。此结果可以进一步处理并存储在新的临时视图中等等。
所以我们最终得到了一个临时视图树 - 查询它们的父临时视图,直到它们最终从文件系统加载数据。基本上,我们希望在数据上存储转换步骤(选择、加入、过滤、修改等)——而不存储新版本。 spark SQL 支持和临时视图似乎很合适。
我们进行了一些成功的测试。我们的想法是将这些临时视图的规范存储在我们的应用程序中,并在启动期间重新创建它们(作为临时或全局视图)。
不确定这是否可行?一个问题是我们需要知道临时视图是如何关联的(哪个查询哪个)。我们像这样创建它们:
sparkSession.sql("select * from other_temp_view").createTempView(name)
所以,当它运行时,我们必须确保other_temp_view 已经在会话中创建。不确定如何实现这一点。一种想法是存储时间戳并以相同的顺序重新创建它们。这可能没问题,因为输出视图很可能必须是“不可变的”。我们不允许更改其他查询所依赖的查询。
任何想法将不胜感激。
【问题讨论】:
标签: apache-spark apache-spark-sql