gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

分类归档mysql

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  数据库
  • 分类归档: "mysql"
mysql 1月 16,2025

如何在shell脚本使用 MySQL 命令行给 SQL 文件传参

在编写 Shell 脚本或进行命令行操作时,有时需要执行包含预定义 SQL 语句的文件,并且可能希望根据不同的情况向这些 SQL 文件传递参数。这在批量处理、自动化任务或动态生成查询时特别有用。MySQL 的命令行工具提供了执行 SQL 文件的能力,但直接从命令行传递参数到 SQL 文件的功能有限。因此,我们通常会结合使用文本处理工具如 sed 来实现这一点。

使用 sed 预处理 SQL 文件

sed 是一个流编辑器,可以在不打开文件的情况下对文件内容进行各种操作,比如替换文本、插入文本等。我们可以利用 sed 在执行 SQL 文件之前修改其中的占位符,将实际的参数值写入 SQL 文件中。下面是一个简单的例子:

假设有一个名为 insertstmt.sql 的 SQL 文件,其内容如下:

INSERT INTO test.demo_table VALUES(@name, @age);

这里 @name 和 @age 是我们需要从外部传递的参数。为了实现这一点,我们可以创建一个 Shell 脚本 execute.sh,它接受两个参数并用它们来替换 yoursql.sql 中的变量:

#!/bin/sh
# 设置参数作为 SQL 变量并添加到 yoursql.sql 文件的第一行
sed -i "1 i\ SET @name='$1';" yoursql.sql
sed -i "1 i\ SET @age=$2;" yoursql.sql

# 执行 SQL 脚本
mysql -u root < yoursql.sql

# 清除 SQL 脚本中的变量设置
sed -i '1,2d' yoursql.sql

在这个脚本中,$1 和 $2 分别对应于调用脚本时提供的第一个和第二个参数。当我们运行这个脚本,例如 ./execute.sh lenmom 30,它会先修改 yoursql.sql 文件,使其看起来像这样:

SET @name='lenmom';
SET @age=30;
INSERT INTO test.demo_table VALUES(@name, @age);

然后执行该 SQL 文件,最后恢复原始状态以供下次使用。

安全性与最佳实践

虽然上述方法可以很好地工作,但在实际应用中需要注意几个方面:

  • 安全性:当构建 SQL 查询字符串时,确保对外部输入进行了适当的转义,以防止 SQL 注入攻击。
  • 错误处理:考虑加入错误处理逻辑,以便在出现问题时能够及时通知用户。
  • 日志记录:记录每次操作的日志对于追踪问题和审计非常重要。
  • 备份机制:如果直接修改了 SQL 文件,在执行前最好先创建一个副本以防万一。

实际案例分析

让我们来看一个更复杂的实例,其中涉及到数据库连接信息以及多个参数的传递。想象一下,你有一个定期更新用户信息的任务,需要每天晚上更新一次特定用户的年龄信息。你可以创建一个名为 update_user_age.sh 的 Shell 脚本来完成这项任务:

#!/bin/bash
# 数据库连接信息
DB_HOST="localhost"
DB_PORT="3306"
DB_USER="root"
DB_PASS="password"

# 用户名和新年龄作为参数传递
USER_NAME="$1"
NEW_AGE="$2"

# 更新 SQL 文件中的变量
sed -i "1 i\ USE my_database;" update_user_age.sql
sed -i "2 i\ UPDATE users SET age = $NEW_AGE WHERE username = '$USER_NAME';" update_user_age.sql

# 执行更新
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASS" < update_user_age.sql

# 恢复 SQL 文件
sed -i '1,2d' update_user_age.sql

此脚本首先指定了数据库连接的信息,接着接收用户名和新的年龄作为参数,并使用 sed 将这些参数插入到 update_user_age.sql 文件中。之后通过 MySQL 命令执行更新操作,最后清理临时添加的内容,保证 SQL 文件的干净。

作者 east
mysql 1月 16,2025

解决命令行mysql -e 执行长sql没结果

用
mysql -h${HOST_NAME} -P${PORT} -u${USER_NAME} ${DB_NAME} -e”${sql}” 方式来执行sql,发现执行没报错,但没有结果。而这个sql在navicat单独执行是没报错的,并且没有双引号等冲突。

在命令行中执行 SQL 时,如果 SQL 语句格式不正确,尤其是涉及到多行 SQL 语句或特殊字符时,命令行可能无法正确解析。可能的原因和解决办法:

  • 分隔符问题:如果 ${bigdata_charge_electric_hour} 包含多行或复杂的 SQL 语句,确保它是一个有效的单行语句。如果包含换行符或者特殊字符,命令行工具可能会解释错误。
  • 引号问题:如果 ${bigdata_charge_electric_hour} 中的 SQL 语句本身包含了引号(例如 ' 或 "),需要确保它们被正确转义,否则命令行会解析错误。可以使用双引号 " 来包装 SQL 查询,或者使用反斜杠转义其中的引号。

解决方法:如果 SQL 语句包含多行或者特殊字符,可以考虑将其写入一个 .sql 文件,并使用 mysql 命令执行文件:

mysql -h${HOST_NAME} -P${PORT} -u${USER_NAME} ${DB_NAME} < your_sql_file.sql 

这样可以避免命令行解析时的格式问题。

修改成上面的方式果然执行成功并且有结果了。

作者 east
mysql, 海豚调度器 9月 18,2024

解决Sqoop从mysql导出数据到hive结果为空时的报错

在海豚调度器1.3.5,用Sqoop从hive导入数据到mysql,有时由于计算结果为空,导致hive的表当天分区的数据为空,Sqoop导出到mysql时报错。海豚调度器设置了失败继续策略也没用,导致后面的工作流没办法继续执行下去。

可以在执行sqoop之前增加判断当天分区的数量是否为空,如果为空就不执行导出。

# 检查分区是否为空
empty=$(hive -S -e "SELECT COUNT(*) FROM cnsaas.ads_bigdata_iot_data WHERE dt='$yesday_date';" | awk '{print $1}')

if [ "$empty" -eq 0 ]; then
  echo "分区为空,不执行 Sqoop 导出。"
else
  echo "分区非空,执行 Sqoop 导出。"

完整的sqoop脚本如下:

#!/bin/bash

# 定义变量
host="your_host"
user="your_user"
pwd="your_password"
yesday_date=$(date -d "yesterday" +%Y-%m-%d)

# 检查分区是否为空
empty=$(hive -S -e "SELECT COUNT(*) FROM cnsaas.ads_bigdata_iot_data WHERE dt='$yesday_date';" | awk '{print $1}')

if [ "$empty" -eq 0 ]; then
  echo "分区为空,不执行 Sqoop 导出。"
else
  echo "分区非空,执行 Sqoop 导出。"
  sqoop export \
    --connect jdbc:mysql://$host:3306/zgcn?characterEncoding=UTF-8 \
    --username $user \
    --password $pwd \
    -m 1 \
    --table ads_bigdata_iot_data\
    --columns stat_date,data_type,stat_type,cu_pid_system_code,max_value,min_value,avg_value \
    --fields-terminated-by '\001' \
    --update-key stat_date,data_type,stat_type,cu_pid_system_code \
    --update-mode allowinsert \
    --input-null-string '\\N' \
    --input-null-non-string '\\N' \
    --null-string '\\N' --null-non-string '\\N' \
    --export-dir /user/hive/warehouse/cnsaas.db/ads_bigdata_iot_data/dt=$yesday_date/*
fi
作者 east
mysql 8月 14,2024

用update来把mysql 2个字段交换数据的注意事项

需要把mysql的2个字段交换数据,刚开始想能不能在同一张表中交换数据,例如:

UPDATE tb_test
SET 
    discharge_energy_start = charge_energy_start,
    discharge_energy_end = charge_energy_end,
    charge_energy_start = discharge_energy_start,
    charge_energy_end = discharge_energy_end;

执行后,发现discharge_energy_start 、discharge_energy_end 数据变了,但charge_energy_start 、charge_energy_end 不是自己想要的数据,原来mysql执行是有分先后顺序的,不会缓存一个中间表来进行数据交换。

这时可以先复制tb_test的表到tb_test_copy1,读取 tb_test1 的数据来更新
tb_test ,就可以达到字段交换数值。

UPDATE tb_test AS dest
JOIN tb_test_copy1 AS src
    ON dest.day = src.day
    AND dest.pid_system_code = src.pid_system_code
SET 
    dest.discharge_energy_start = src.charge_energy_start,
    dest.discharge_energy_end = src.charge_energy_end,
    dest.charge_energy_start = src.discharge_energy_start,
    dest.charge_energy_end = src.discharge_energy_end
WHERE dest.day = '2024-08-08'
  AND dest.pid_system_code REGEXP '^1048\\.E[0-9]+\\.S[0-9]+\\.IEM$';
作者 east
mysql 7月 15,2024

mysql使用 docker-compose 方式部署时区不是东八区的解决方案

mysql使用docker-compose安装后,发现时区不是东八区,导致一些服务有些出现问题。

查询时区:

SHOW VARIABLES LIKE ‘%time_zone%’;

MySQL 使用的是 UTC 时区,而不是东八区(CST)。在 Docker 容器中运行的 MySQL 实例也会使用 UTC 时区。要解决这个问题,您需要在 MySQL 配置文件中设置时区为东八区。

解决方案:

修改 my.cnf 配置文件,添加以下行以设置时区为东八区(CST):在 [mysqld] 部分添加:

default-time_zone = '+08:00'

mysql库 /opt/mysql-master/conf/my.cnf 

示例:

[mysqld]

...

default-time_zone = '+08:00'

重新启动 MySQL 容器以应用更改。

docker-compose -f /opt/mysql-master/docker-compose.yml down docker-compose -f /opt/mysql-master/docker-compose.yml up -d

现在,您的 MySQL 实例应该已经使用东八区(CST)时区了。您可以通过登录到 MySQL 并运行以下命令来验证时区设置:

SHOW VARIABLES LIKE 'time_zone';

输出应显示 time_zone 为 +08:00。

作者 east
mysql, 运维 6月 27,2024

centos离线安装mysql客户端(亲测可用)

由于项目的需要,需要在内网的centos服务器,有mysql客户端远程访问mysql服务器。

1. 下载MySQL客户端

首先,你需要下载MySQL客户端软件包。你可以从MySQL官方网站下载,或者使用CentOS的软件仓库。

https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar

2. 安装MySQL客户端

解压缩下载的文件,并安装RPM包:

tar xvf mysql-5.7.34-1.el7.x86_64.rpm-bundle.tar
rpm -ivh mysql-community-client-5.7.34-1.el7.x86_64.rpm

用命令 which mysql 看到下面结果时说明安装成功了:

/usr/bin/mysql

3. 连接到远程MySQL服务器

使用以下命令连接到远程MySQL服务器:

mysql -u your_username -p -h remote_server_ip

注意事项:

  • 确保远程MySQL服务器允许来自你的CentOS服务器的连接。你可能需要在远程服务器的MySQL配置文件(通常是my.cnf)中设置bind-address为0.0.0.0,并在mysql.user表中授予远程访问权限。
  • 确保防火墙规则允许两个服务器之间的3306端口(MySQL默认端口)的流量。
  • 如果你使用的是较新或较旧的MySQL版本,请下载相应的安装包。
作者 east
mysql, Spark 6月 14,2024

PySpark清空mysql的表数据代码(亲测可用)

用PySpark来数据分析和数据仓库操作时,有时需要先清空mysql数据再写入数据。但是pyspark不能直接执行DDL(数据定义语言)操作如TRUNCATE TABLE,这时一种方法是用第三方库,利用 TRUNCATE TABLE 等方法来操作,另外还有一种变通的方法:

直接使用插入空数据的方式来“清空”表并不是传统意义上的清空(truncate或delete操作),但如果你想通过Pyspark实现类似效果,可以考虑先创建一个空的DataFrame,然后覆盖写入到目标表中。这种方式实际上是执行了一个覆盖写入操作,会删除原表数据并用新的空数据集替换。请注意,这种方法会依赖于你的MySQL配置是否允许覆盖写入操作,且在大量数据情况下效率较低。

from pyspark.sql import SparkSession
from pyspark.sql.types import StructType, StructField, StringType

def clear_table_with_pyspark(table_name):
    try:
        # 初始化SparkSession
        spark = SparkSession.builder.getOrCreate()

        # 定义空DataFrame的架构,这里只是一个示例,根据你的表实际结构来定义
        schema = StructType([
            StructField("column1", StringType(), True),  # 更改为你表中的实际列名和类型
            StructField("column2", StringType(), True),  # 可以根据需要添加更多列
            # ...
        ])

        # 创建一个空的DataFrame
        empty_df = spark.createDataFrame(spark.sparkContext.emptyRDD(), schema)

        # JDBC连接字符串
        url = "jdbc:mysql://{host}:{port}/{database}".format(
            host=DB_HOST,
            port=str(DB_PORT),
            database=DB_NAME
        )

        # 使用覆盖写入模式(overwrite)将空DataFrame写入到表中
        empty_df.write \
            .format("jdbc") \
            .option("url", url) \
            .option("dbtable", table_name) \
            .option("user", DB_USER) \
            .option("password", DB_PASSWORD) \
            .option("driver", "com.mysql.jdbc.Driver") \
            .mode("overwrite") \
            .save()

        print(f"Table {table_name} has been emptied using Spark write operation.")
    except Exception as e:
        print(f"Error occurred while clearing table {table_name}: {e}")
        if hasattr(e, 'java_exception'):
            java_exception = e.java_exception
            print("Java exception details:", java_exception)
            print("Java exception message:", java_exception.getMessage())
            print("Java exception stack trace:", java_exception.getStackTrace())

# 调用函数
clear_table_with_pyspark("your_table_name")

请注意,这种方法的一个重要限制是它要求你明确地定义目标表的结构,这可能在表结构复杂或频繁变动时变得不够灵活。此外,对于非常大的表,尽管它能达到“清空”的目的,但效率和资源消耗可能不如直接使用TRUNCATE或DELETE语句。

作者 east
mysql, 大数据开发 10月 12,2023

sql聚合函数嵌套问题 aggregate function cannot contain aggregate parameters

在需求的应用场景,需要对create_time字段求最小值并求和,刚开始理所当然写成像下面这样:

 SUM(COALESCE (CASE WHEN MIN(crl.create_time)  BETWEEN date_add(date_sub(current_date(), 1), -1 * (open_case_day_num % 6)) AND current_date() AND  crl.approval_status in('0','1') and crl.del_flag = '0' THEN  CAST(crl.repay_total AS DECIMAL(10, 2)) END,0))

SUM聚合函数又嵌套MIN函数,果然报错了:
1105 – errCode = 2, detailMessage = aggregate function cannot contain aggregate parameters

这是因为 根据错误日志,问题出在了对于SUM函数中的聚合参数的使用上。在Spark SQL中,聚合函数不能包含聚合参数,也就是不允许在聚合函数内部再使用其他聚合函数。

解决方案是可以先使用子查询,将MIN(create_time)计算结果作为一个新的列,然后在外层查询中对这个新列和其他列进行求和,如下所示:

SELECT SUM(amount), SUM(min_create_time)
FROM (
  SELECT amount, MIN(create_time) AS min_create_time
  FROM your_table
  GROUP BY amount
) t;

其中,我们首先在子查询中计算每个amount的最小create_time,并将结果存储在名为min_create_time的新列中。然后,在外部查询中,我们对amount列和min_create_time列同时进行汇总。

需要注意的是,在子查询中,我们只能按照amount列进行分组,否则会导致结果不正确。如果还有其他需要汇总的列,则需要在子查询中一并处理。

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
mysql, 大数据开发, 提示词 9月 7,2023

java批量生成海量测试数据及用ChatGPT提示语一键生成的方法

在做大数据开发时,为了测试性能等,需要上千万,甚至TB或PB级别的,在测试环境可能没有那么多数据,这时可以考虑进行造测试数据。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Random;

public class TestDataGenerator {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_database";
        String username = "your_username";
        String password = "your_password";
        int batchSize = 1000; // 每批次插入的数据量
        int totalRecords = 1000000; // 总共要生成的数据量

        try {
            Connection connection = DriverManager.getConnection(url, username, password);
            connection.setAutoCommit(false);

            String insertQuery = "INSERT INTO test (id, callid, type, ...其他列...) VALUES (?, ?, ?, ...其他值...)";
            PreparedStatement preparedStatement = connection.prepareStatement(insertQuery);

            Random random = new Random();

            for (int i = 1; i <= totalRecords; i++) {
                // 设置每个字段的值,根据表结构设置对应的数据生成逻辑
                preparedStatement.setLong(1, i);
                preparedStatement.setString(2, "CallSheet" + i);
                preparedStatement.setString(3, "Type" + (random.nextInt(5) + 1));
                // 设置其他字段的值...

                preparedStatement.addBatch();

                if (i % batchSize == 0) {
                    preparedStatement.executeBatch();
                    connection.commit();
                }
            }

            preparedStatement.executeBatch();
            connection.commit();

            preparedStatement.close();
            connection.close();

            System.out.println("测试数据生成完成!");
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

请将上述示例中的数据库连接信息和插入逻辑根据您的数据库设置和表结构进行相应的修改。此程序将会在数据库中插入海量测试数据。

更方便的方法是在ChatGPT等大模型,输入下面提示语:

根据下面的表结构,生成100万的测试数据,给出详细的java实现代码或存储过程代码:【表结构】

亲测在New Bing是可以生成可以运行的代码。

作者 east
Flink, mysql 8月 15,2023

操作指南:使用 Flink CDC 同步 MySQL 分库分表

线事务处理(OLTP)系统中,为了解决单表数据量大的问题,通常采用分库分表的方法对单张大表进行拆分,以提高系统的吞吐量。但为了方便数据分析,在同步到数据仓库或数据湖时,一般需要将分库分表的数据合并成一张大表。本教程将向您展示如何使用 Flink CDC 为上述场景构建实时数据湖。本文中的示例将全部基于 Docker 并使用 Flink SQL。无需一行 Java/Scala 代码或安装 IDE。本指南的全部内容包含 docker-compose 文件。整个过程将通过从 MySQL 同步数据到 Iceberg 来展示,如下图所示。

步骤1:创建 docker-compose.yml 文件 创建一个 Docker Compose 文件(docker-compose.yml),内容如下:

Version: ‘2.1’

Services:

sql-client: user: flink

image: yuxialuo/flink-sql-client:1.13.2.v1

depends_on:

– jobmanager

– mysql

environment: FLINK_JOBMANAGER_HOST: jobmanager MYSQL_HOST: mysql volumes: – shared tmpfs:/tmp/iceberg jobmanager: user: flink image: flink:1.13.2-scala_2.11 ports: – “8081:8081” command: jobmanager environment: – | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager volumes: – shared tmpfs:/tmp/iceberg taskmanager: user: flink image: flink:1.13.2-scala_2.11 depends_on: – jobmanager command: taskmanager environment: – | FLINK_PROPERTIES= jobmanager.rpc.address: jobmanager taskmanager.numberOfTaskSlots: 2 volumes: – shared tmpfs:/tmp/iceberg mysql: image: debezium/example-mysql:1.1 ports: – “3306:3306” environment: – MYSQL_ROOT_PASSWORD=123456 – MYSQL_USER=mysql用户 – MYSQL_PASSWORD=mysqlpw volumes: – shared tmpfs driver-options: type: “tmpfs” device: “tmpfs”

这个 docker-compose 文件中的容器包括:

  • SQL-Client:Flink SQL Client,用于提交 SQL 查询和查看 SQL 执行结果
  • Flink Cluster:包含 Flink JobManager 和 Flink TaskManager,用于执行 Flink SQL
  • MySQL:作为数据源分库分表,存储用户表

注意:如果您想在自己的 Flink 环境中运行本指南,您需要下载下面列出的包并将其放在 Flink 目录的 lib 目录中,即 FLINK_HOME/lib/。

  • flink-sql-connector-mysql-cdc-2.4-SNAPSHOT.jar
  • flink-shaded-hadoop-2-uber-2.7.5-10.0.jar
  • iceberg-flink-1.13-runtime-0.13.0-SNAPSHOT.jar

步骤 2:准备 MySQL 数据库中的数据 进入 MySQL 容器,执行以下命令:

shell复制代码
docker-compose exec mysql mysql -uroot -p123456

然后在 MySQL 中创建数据、表,并填充数据:

sql复制代码
CREATE DATABASE db_1;
USE db_1;
CREATE TABLE user_1 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_1 VALUES (110,"user_110","上海","123567891234","user_110@foo.com");

CREATE TABLE user_2 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_2 VALUES (120,"user_120","上海","123567891234","user_120@foo.com");

CREATE DATABASE db_2;
USE db_2;
CREATE TABLE user_1 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_1 VALUES (110,"user_110","上海","123567891234", NULL);

CREATE TABLE user_2 (
  id INT NOT NULL PRIMARY KEY,
  name VARCHAR(255) NOT NULL DEFAULT 'flink',
  address VARCHAR(1024),
  phone VARCHAR(512),
  email VARCHAR(255)
);
INSERT INTO user_2 VALUES (220,"user_220","上海","123567891234","user_220@foo.com");

步骤3:使用 Flink DDL 和 Flink SQL CLI 创建表 进入 Flink SQL CLI 容器,执行以下命令:

shell复制代码
docker-compose exec sql-client ./sql-client

在 Flink SQL CLI 中,执行以下命令:

sql复制代码
-- Flink SQL
SET execution.checkpointing.interval = 3s;

-- 创建源表 user_source 来捕获 MySQL 中所有数据库和表的数据并使用正则表达式来匹配这些数据库和表的配置项中使用的表。
-- 而且表还定义了一个元数据列来区分数据来自哪个数据库和表。
CREATE TABLE user_source(
  database_name STRING METADATA VIRTUAL,
  table_name STRING METADATA VIRTUAL,
  `id` DECIMAL(20, 0) NOT NULL,
  name STRING,
  address STRING,
  phone STRING,
  email STRING,
  PRIMARY KEY (`id`)
) WITH (
  'connector' = 'mysql-cdc',
  'hostname' = 'mysql',
  'port' = '3306',
  'username' = 'root',
  'password' = '123456',
  'database-name' = 'db_[0-9]+',
  'table-name' = 'user_[0-9]+'
);

关注公众号“大模型全栈程序员”回复“大数据面试”获取800页左右大数据面试宝典 ,回复“大数据”获取多本大数据电子书

作者 east
mysql 4月 1,2023

Oracle 为 MySQL HeatWave 添加了机器学习特性

甲骨文正在为其数据分析云服务 MySQL HeatWave 添加新的机器学习功能。
MySQL HeatWave 在单个 MySQL 数据库中结合了 OLAP(在线分析处理)、OLTP(在线事务处理)、机器学习和 AI 驱动的自动化。
该公司在周四宣布更新时表示,新的机器学习功能将被添加到该服务的 AutoML 和 MySQL Autopilot 组件中。
虽然 AutoML 允许开发人员和数据分析师在 MySQL HeatWave 中构建、训练和部署机器学习模型,而无需转移到单独的机器学习服务,但 MySQL Autopilot 为 HeatWave 和 OLTP 提供了基于机器学习的自动化,例如自动配置、自动编码、自动查询计划、自动形状预测和自动数据放置等功能。
甲骨文表示,AutoML 添加的基于机器学习的新功能包括多变量时间序列预测、无监督异常检测和推荐系统,并补充说所有新功能都已普遍可用。
“多变量时间序列预测可以预测多个按时间排序的变量,其中每个变量都取决于其过去值和其他因变量的过去值。例如,考虑到用于发电的各种能源,它被用来建立预测模型来预测冬季的电力需求,”甲骨文研究高级副总裁 Nipun Agarwal 说。
与让受过时间序列分析或预测培训的统计学家为所需输出选择正确算法的常规做法相比,AutoML 的多变量时间序列预测会自动预处理数据以选择 ML 模型的最佳算法并自动调整模型,公司说。
“HeatWave AutoML 自动预测管道使用了一项专利技术,该技术由高级时间序列预处理、算法选择和超参数调整等阶段组成,”Agarwal 说,并补充说这种自动化可以帮助企业节省时间和精力,因为他们不需要有训练有素的统计人员。
根据 Constellation Research 首席分析师 Holger Muller 的说法,多变量时间序列预测功能是 Oracle 的 MySQL HeatWave 所独有的。
“时间序列预测,多变量或其他方式,目前不作为提供机器学习增强分析的单一数据库的一部分提供。例如,AWS 为时间序列提供了一个单独的数据库,”Muller 说。
除了多变量时间序列预测,Oracle 还在 MySQL HeatWave 中添加了基于机器学习的“无监督”异常检测。
该公司表示,与使用特定算法检测数据中特定异常的做法相比,AutoML 可以从未标记的数据集中检测不同类型的异常,并补充说,当企业用户不知道异常类型是什么时,该功能可以帮助他们数据集。
“HeatWave AutoML 生成的模型为所有类型的异常(本地、集群和全局)提供了高精度。该过程是完全自动化的,数据分析师无需手动确定要使用的算法、要选择的功能以及超参数的最佳值,”Agarwal 说。
此外,AutoML 添加了一个推荐引擎,它称之为推荐系统,支持 MySQL HeatWave 中算法选择、特征选择和超参数优化的自动化。
“使用 MySQL HeatWave,用户可以调用 ML_TRAIN 过程,该过程会自动训练模型,然后存储在 MODEL_CATALOG 中。要预测推荐,用户可以调用 ML_PREDICT_ROW 或 ML_PREDICT_TABLE,”Agarwal 说。
此外,甲骨文还在 HeatWave 中为业务用户添加了一个交互式控制台。
“新的交互式控制台允许业务分析师使用可视化界面构建、训练、运行和解释 ML 模型——无需使用 SQL 命令或任何编码,”Agarwal 说,并补充说该控制台使业务用户更容易探索条件场景他们的企业。
“添加交互式控制台符合企业试图让机器学习负责的做法。该控制台将帮助商业用户深入池中,因为他们希望发展成为‘公民数据科学家’,以避免陷入过多的困境,”dbInsight 首席分析师 Tony Baer 说。
该控制台最初可用于 AWS 上的 MySQL HeatWave。
甲骨文还表示,它将为 AWS 上的 HeatWave 添加对 Amazon S3 存储的支持,以降低成本并提高服务的可用性。
“当数据从 MySQL(InnoDB 存储引擎)加载到 HeatWave 时,会向构建在 S3 上的横向扩展数据管理层制作一份副本。当操作需要将数据重新加载到 HeatWave 时,例如在错误恢复期间,多个 HeatWave 节点可以并行访问数据,并且数据可以直接加载到 HeatWave 中,无需任何转换,”Agarwal 说。
添加到 MySQL HeatWave 的新功能包括 MySQL Autopilot 的两个新增功能——自动形状预测顾问与交互式控制台的集成和自动卸载。
“在交互式控制台中,数据库用户现在可以访问 MySQL Autopilot 自动形状预测顾问,该顾问会持续监控 OLTP 工作负载,以在任何给定时间推荐正确的计算形状并提供解释——让客户始终获得最佳性价比,”阿加瓦尔说。
据该公司称,自动卸载功能可以根据工作负载历史推荐要卸载的表。
“释放内存可以减少运行工作负载所需的集群大小并节省成本,”Agarwal 说,并补充说这两个功能都已普遍可用。
Oracle 正在提供更小形状的 HeatWave,以吸引数据量更小的客户。
该公司表示,与早期标准 HeatWave 节点的 512GB 大小相比,较小的形状将具有 32GB 的大小,能够以每月 16 美元的价格处理高达 50GB 的数据。
此外,该公司表示,其标准 512GB HeatWave Node 的数据处理能力已从 800GB 增加到 1TB。
“随着这一增长和其他查询性能的改进,HeatWave 的性价比优势进一步提高了 15%,”Agarwal 说。

作者 east
mysql 3月 27,2023

Google 的 Logica 语言解决了 SQL 的缺陷

谷歌推出了开源 Logica 编程语言,这是一种逻辑编程语言,旨在通过使用数学命题逻辑而非自然语言的语法来“解决 SQL 问题”。
作为谷歌 Yedalog 语言的后继者,Logica 于 4 月 12 日推出,是一种类似于 Datalogic 的逻辑语言。面向工程师、数据科学家和其他专家,它将代码编译为 SQL 并在基于云的 Google BiqQuery 数据仓库上运行,并提供对 PostgreSQL 和 SQLite 的实验性支持。但与 SQL 不同,Logica 更简洁并且支持可重用的抽象。它还支持模块和导入,可以从交互式 Python 笔记本中使用,并使测试查询变得简单自然,谷歌开发人员在一篇博客文章中写道。
Logica 通过使用数理逻辑语法而不是自然英语语言来解决 SQL 问题。谷歌列举了 SQL 的问题,例如从英文单词构建语句的冗长和对抽象的有限支持。 Logica 扩展了经典的逻辑编程语法,特别是聚合。它被宣传为一种用于数据操作的声明性语言。
Logica 开源项目背后的 Google 开发人员鼓励在以下场景中使用它:
Google 设立了一个教程来帮助开发者学习 Logica。要在 Google Cloud BigQuery 上运行逻辑程序,开发人员需要打开一个 Google Cloud 项目。项目建立后,开发者可以通过提供项目 ID 在 Colab 中运行 Logica 程序。要在本地运行 Logica,开发人员需要 Python 3。

作者 east

1 2 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.