You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP BigQuery是否有货币转换功能?迁移SAP HANA存储过程求助

在BigQuery中实现SAP HANA CONVERT_CURRENCY的等价功能

1. 使用BigQuery原生CURRENCY_CONVERT函数

BigQuery内置的CURRENCY_CONVERT函数可直接实现基于历史日期的货币转换,默认采用Google Finance的公开汇率数据,语法与HANA的CONVERT_CURRENCY逻辑对齐:

CURRENCY_CONVERT(
  amount,
  from_currency_code,
  to_currency_code,
  date
)

示例:将2023年10月15日的100欧元转换为美元

SELECT CURRENCY_CONVERT(100, 'EUR', 'USD', DATE('2023-10-15')) AS converted_amount;

注意点:

  • 货币代码必须遵循ISO 4217标准(如'EUR'、'GBP')
  • 该函数依赖公开汇率数据源,若业务需使用企业内部定制汇率,需改用自定义汇率表方案

2. 基于自定义汇率表实现(企业级场景)

如果依赖内部维护的汇率数据,可通过以下步骤实现:

第一步:创建汇率表

CREATE OR REPLACE TABLE `your-project.your-dataset.currency_rates` (
  from_currency STRING,
  to_currency STRING,
  rate_date DATE,
  exchange_rate FLOAT64,
  PRIMARY KEY(from_currency, to_currency, rate_date)
);

第二步:编写历史汇率匹配逻辑

支持两种匹配规则:严格匹配指定日期,或指定日期无数据时取最近有效汇率:

WITH source_data AS (
  SELECT 
    transaction_amount AS amount,
    currency_code AS from_currency,
    transaction_date AS target_date
  FROM `your-project.your-dataset.transaction_records`
)
SELECT
  sd.amount,
  sd.from_currency,
  sd.target_date,
  sd.amount * cr.exchange_rate AS usd_amount
FROM source_data sd
JOIN `your-project.your-dataset.currency_rates` cr
ON cr.from_currency = sd.from_currency
AND cr.to_currency = 'USD'
AND cr.rate_date = (
  SELECT MAX(rate_date) 
  FROM `your-project.your-dataset.currency_rates`
  WHERE from_currency = sd.from_currency
    AND to_currency = 'USD'
    AND rate_date <= sd.target_date
);

3. 迁移存储过程至BigQuery

将HANA存储过程转为BigQuery存储过程的示例:

CREATE OR REPLACE PROCEDURE `your-project.your-dataset.convert_to_usd`(
  IN source_table STRING,
  IN target_table STRING,
  IN amount_col STRING,
  IN currency_col STRING,
  IN date_col STRING
)
BEGIN
  EXECUTE IMMEDIATE FORMAT("""
    CREATE OR REPLACE TABLE `%s` AS
    SELECT
      *,
      CURRENCY_CONVERT(%s, %s, 'USD', %s) AS usd_amount
    FROM `%s`
  """, target_table, amount_col, currency_col, date_col, source_table);
END;

调用存储过程:

CALL `your-project.your-dataset.convert_to_usd`(
  'your-project.your-dataset.transaction_records',
  'your-project.your-dataset.usd_converted_records',
  'transaction_amount',
  'currency_code',
  'transaction_date'
);

关键注意事项

  • 使用原生函数时,需确认Google Finance覆盖了你所需的货币种类和历史日期范围
  • 自定义汇率表需定期同步数据,确保汇率的时效性和完整性
  • 存储过程中使用动态SQL时,通过FORMAT函数处理参数可避免SQL注入风险

内容的提问来源于stack exchange,提问作者Atul Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:57:17