具有相同列类型但不同数据的 4 个表的联合按 AWS Athena 中的最大时间排序?

问题描述

我遇到了一个问题,我有 4 个看起来像这样的表:

设备 volume1 volume2 时间
device_id x y time_devicemessage

每个表用于一个设备,所以我有 4 个设备,它们以不同的时间戳发送消息。

我想知道如何将这 4 个表合并为 1 个,但仅根据时间戳显示每个表中最后一个 volume 数据的查询

所以它可能看起来像这样:

设备 volume1 volume2 时间
设备A 最后一个值 (x) 最后一个值 (y) time_devicemessageA
设备B 最后一个值 (x) 最后一个值 (y) time_devicemessageB
设备C 最后一个值 (x) 最后一个值 (y) time_devicemessageC
设备编号 最后一个值 (x) 最后一个值 (y) time_devicemessageD

非常感谢您的支持,我将非常感谢您的帮助!

问候,鲁本。

解决方法

你可以得到每个表的最后一行,然后联合这四行,就像这样:

SELECT device,volume1,volume2,time FROM device1 ORDER BY time DESC LIMIT 1

UNION 

SELECT device,time FROM device2 ORDER BY time DESC LIMIT 1

UNION 

SELECT device,time FROM device3 ORDER BY time DESC LIMIT 1

UNION 

SELECT device,time FROM device4 ORDER BY time DESC LIMIT 1;
,

我相信你想要的语法是:

import numpy as np
import pandas as pd  
import shap
from sklearn.linear_model import LinearRegression

X = df.loc[:,df.columns.str.startswith(('Q27'))]
features = df.loc[:,df.columns.str.startswith(('Total','Q25C','Loyal','Image'))]
w = df.loc[:,df.columns.str.startswith(('WEIGHT_Both'))]

def reg_loop(X,w,features,label):
    y = features[label]

    rm_indx_X = list(X.dropna().index)
    X = X.loc[rm_indx_X]
    y = y.loc[rm_indx_X]
    w = w.loc[rm_indx_X]

    lm = LinearRegression()

    fit = lm.fit(X,y,sample_weight = w['WEIGHT_Both'])

    explainer = shap.LinearExplainer(fit,X,feature_dependence="independent")

    shap_values = explainer.shap_values(X)

    shap_values_abs = np.absolute(shap_values)
    means_norm = shap_values_abs.mean(axis = 0)/1
    idx = np.argsort(means_norm)
    means = np.array(means_norm)[idx]
    return(means)

pred_df = pd.DataFrame({i: reg_loop(X,i) for i in features.columns},X.columns.values.tolist(),columns = features.columns)
pred_df

请注意,将相似的信息存储在四个不同的表中被认为是一种糟糕的数据设计。最好将所有数据放在一张表中。