gpt4 book ai didi

java - 使用 Java 在 PostgreSQL 中以编程方式生成 OLAP 多维数据集

转载 作者:行者123 更新时间:2023-12-02 05:00:53 24 4
gpt4 key购买 nike

是否有任何方法可以使用 PostgreSQL 和 Java 完成以下行为:

假设您有 2 张 table :
交易用户Transactions 保存一些交易数据,而 Users 显然保存用户数据。
这两个表可以在 Users.ID == Transactions.UserID 条件下连接。

由于该连接表中的列相当少,所以我想做一些分析。

例如,我想知道每次使用完成了多少笔交易。当然,你会写这样的东西:

SELECT UserID, COUNT(DISTINCT TransactionID)
FROM Users NATURAL JOIN Transactions
GROUP BY UserID;

但是,我们还想获取有关所使用的每种货币的交易的一些信息。

SELECT Currency, COUNT(DISTINCT TransactionID)
FROM Users NATURAL JOIN Transactions
GROUP BY Currency;

或者每个用户使用每种货币支付了多少次:

SELECT UserID, Currency, COUNT(DISTINCT TransactionsID) AS NumTransactions
FROM Users NATURAL JOIN Transactions
GROUP BY UserID, Currency;

但是现在,考虑到最后一个 SQL,我可以实现之前 2 个 SQL 中的任何一个,如下所示:

首先,我根据之前的 SQL 创建一个表:

CREATE TABLE PerUserCurrencyStats AS
SELECT UserID, Currency, COUNT(DISTINCT TransactionsID) AS NumTransactions, SUM(Amount) AS TotalAmount
FROM Users NATURAL JOIN Transactions
GROUP BY UserID, Currency;

然后我减少维度并对需要求和的内容求和:

CREATE TABLE PerUserTransactionCount AS
SELECT UserID, SUM(NumTransactions)
FROM PerUserCurrencyStats
GROUP BY UserID;

好的,那么问题在哪里?
好吧,这对我来说真的看起来像 OLAP Cube(请注意,我还希望对其进行分析的其他列/维度)。

由于我仅限于使用 PostgreSQL 并动态生成此类表,所以我想知道是否有办法在我的 Java 代码中通过调用 SQL 命令来做到这一点,但无需自己编写所有这些繁琐的代码?

最佳答案

编写所有这些 SQL 代码可能有点乏味。正如您提到的 Olap 立方体,我建议您使用 mondrian。

您可以使用Mondrian在您的java代码中嵌入molap引擎。 .

您必须在 Java 代码中使用的架构文件中描述多维数据集、维度、度量。

Here's代码片段。

package project1;

import java.io.PrintWriter;

import mondrian.olap.Connection;
import mondrian.olap.DriverManager;
import mondrian.olap.Query;
import mondrian.olap.Result;

public class imondrian {

public static void main(String[] args) {
String connectString = "Provider=mondrian;"
+ "Jdbc=jdbc:mysql://localhost:3306/foodmart?user=foodmart&password=foodmart;"
+ "Catalog=file:/path/to/file/FoodMart.xml;"
+ "JdbcDrivers=com.mysql.jdbc.Driver";

System.out.println(connectString);

Connection connection = null;

connection = DriverManager.getConnection(connectString, null, false);
Query query = connection.parseQuery(
"SELECT {[Measures].[Unit Sales], [Measures].[Store Cost], [Measures].[Store Sales]} on columns,"
+ "{([Promotion Media].[All Media], [Product].[All Products])} ON rows "
+ "FROM Sales "
+ "WHERE ([Time].[1997])"
);

Result result = connection.execute(query);

result.print(new PrintWriter(System.out,true));
}
}

关于java - 使用 Java 在 PostgreSQL 中以编程方式生成 OLAP 多维数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28294018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com